簡體   English   中英

有沒有辦法轉換到泛型函數中傳遞的類型?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM