2012-10-22 27 views
6

CA1305 kültürünü belirtirken ayrılık ortaya çıkar, ancak bu aşırı yüklenme kodda kullanılmaz.CA1305: Bir <code>IFormatProvider</code> gerektiren bir aşırı yüklenme olduğunda,

string.Format(CultureInfo.InvariantCulture, "{0} - {1}", id, name); 

Ancak, ben düşünüyorum:

string.Format("{0} - {1}", id, name); 

bu uyarı kurtulmak için açık yolu kullanılacak kültürünü belirtmektir:

Örneğin

, aşağıdaki kod bu uyarıyı yükseltir Bu yol çok ayrıntılı.

Hangi alternatifler var?

cevap

2

Açık format sağlayıcı geçişini korurken aynı zamanda verimsizliğe yol açabilecek tek alternatif, kültüre özgü cephe yöntemlerini kullanmak olacaktır. Neyse ki, sadece InvariantCulture ve CurrentCulture için sadece formatlar, bu nedenle, her bir temel formatlama yöntemi için sadece iki cephe yöntemi gerekli olacaktır. aşağıdaki gibi

public static string FormatForInvariantCulture(this string template, params object[] substitutions) 

ve çağrılabilir:

sizin örnek kod için tipik bir cephe yöntemi böyle bir imzaya sahip olabilir

"{0} - {1}".FormatForInvariantCulture(id, name); 

kültürün içine olurdu cephe yöntemlerini düzenlemek için başka bir yaklaşım IoC teknikleri kullanılarak enjekte edilebilen özel formatlayıcı türleri. Örneğin, aşağıdaki gibi bir ara yüz biçimlendirme için tanımlanabilir: ne olursa olsun

public SomeClass(IFormatter systemFormatter, IFormatter uiFormatter) 
{ 
    // ... 
} 

:

public interface IFormatter 
{ 
    string Format(string template, params object[] substitutions); 
} 

Kültür spesifik örnekleri aşağıdaki gibi kullanarak kurucular biçimlendirme gerçekleştirmek için gereken türde enjekte edilebilir Cephe yöntemlerinin paketlenmesinin yolunun, CA2241'in (ProvideCorrectArgumentsToFormattingMethods) yöntemlerin kullanımını incelemediğini dikkate almak önemlidir, bu nedenle bunu yapmak için özel bir kural eklemeyi düşünmek yararlı olabilir.

+0

Tamam, bu kendimle geldiğim bir şey, şu anda benim kodumdaki gibi görünüyor: 'Format.Invariant (" {0} - {1} ", id, name)' ve 'Format.ForUI'. Sorun şu ki bu sadece "string.Format" çözüyor. Bu uyarının başka bir örneğini çözemez ... –

+0

Yup. Muhtemelen sık aradığınız her formatlama yöntemi için cephe metodu çiftleri oluşturmayı düşünebilirsiniz. Ayrıca, bu rotaya giderseniz, CA2241'in ([ProvideCorrectArgumentsToFormattingMethods] (http://msdn.microsoft.com/en-us/library/ms182361.aspx)) cepheyi taramayacağının farkında olmalısınız. yapacak özel bir kural eklemeyi düşünmek istiyorum. –

+0

Statik sınıf 'For' hakkında iki özellik olan Invariant' ve' UI' hakkında ne düşünüyorsunuz? 'Değişmez' basitçe 'CultureInfo.InvariantCulture' ve 'UI'' CultureInfo.CurrentCulture' geri dönecekti. Bu, aşağıdaki gibi bir kod ortaya çıkarır: string.Format (For.Invariant, "{0} - {1}", id, name); 've buna ek olarak, bu CA1305'i yükselten ve sorunu çözecek herhangi bir senaryoda kullanılabilir. CA2241 ile. –

İlgili konular