[英]Is there a way to cast to the type passed in a generic function?
我想編寫一個通用函數來循環遍歷幾個不同的對象,這些對象有一個共同的字段。 我想在所有對象上更改此字段。
但是,我需要泛型函數中每個對象的類型。
我的代碼如下所示:
UpdateObjects<objectType>(IMyCollection collection) {
foreach (objectType obj in collection)
{
var correctlyTypedObject = (objectType)obj.MakeEditable();
// Do stuff with correctlyTypedObject
}
}
MakeEditable() 更改了 obj 的類型,因此我需要將其轉換回來。
有沒有辦法做到這一點?
我調用函數如下: UpdateObjects<userObject>(collection);
由於我使用userObject
類型調用函數,因此我認為您可以使用該類型在函數本身內投射對象。 這個假設正確嗎?
我不知道我是否完全理解你的問題,但在我看來你正在尋找動態提供的東西。
假設三個類A,B,C
都具有屬性P
。
class A { public int P { get; set; } }
class B { public int P { get; set; } }
class C { public int P { get; set; } }
那么一個函數可能如下所示:
private void UpdateObjects(dynamic[] collection)
{
int newValue = 123456;
foreach (dynamic obj in collection)
{
obj.P = newValue;
}
}
可以這樣使用:
dynamic[] collection = new dynamic[] {new A(), new B(), new C()};
UpdateObjects(collection);
// Result
foreach (dynamic o in collection)
{
int p = o.P;
Debug.WriteLine(p);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.