2009-07-16 24 views
29

Birkaç tarih alan, diğer parametrelerin bilinmeyen bir sayısını (params anahtar sözcüğünü kullanarak) alan ve bir nesne listesi döndüren bir temsilci tanımlamak istiyorum;Paragraf anahtar sözcüğünü bir temsilcide kullanabilir misiniz?

Func<DateTime, DateTime, params int[], List<object>> 

Visual Studio, bu izin verilmediğini düşünmemi sağlayan sözdizimini sevmiyor. Birisi bana nedenini söyleyebilir mi?

cevap

21

Sen özel olamaz bir genel tür bağımsız değişkeni üzerinde niteliklerini (CLI buna izin vermez) ve C# derleyici, ilgili yöntem parametresi üzerinde System.ParamArrayAttribute yayarak params anahtar sözcüğünü uygular.

Bu System.Func <...> jenerik delegelerle kullanmaktan alıkoyar, ama her zaman params kullanıyor kendi temsilci türü oluşturabilir.

42

Sondan başka parametreler için params kullanamazsınız ... bu, şikayetçinin bir parçası.

Ayrıca, tür argümanında params kullanamazsınız. Bu sadece delegeler için değil, genel olarak. Örneğin, yazamıyor:

List<params string[]> list = new List<params string[]>(); 

Ancak, böyle bir yeni temsilci tanımlayabilir:

yöntem grubu dönüşüm maç olacak
delegate void Foo(int x, params string[] y); 

... 

Foo foo = SomeMethod(); 
foo(10, "Hi", "There"); 

Not olduğunu

void SomeMethod(int x, string a, string b) 

ve örneğin çalışmak için yukarıdaki bekliyoruz: siz birYöntem ilan edemedi - bir dize dizisi alır yöntemi. Öyle olmak zorunda olacaktır:

void SomeMethod(int x, string[] args) 

(. Ya da elbette params kendisini kullanabilirsiniz)

İlgili konular