簡體   English   中英

C#如何編寫通用方法

[英]C# how to write a generic method

我有幾個Types ,所有具有相同的“元數據”的屬性。 我希望有一個方法,我可以傳遞任何Type的對象作為更新其元數據的參數。

我可以在方法中使用dynamic參數,如下所示:

private void UpdateMeta(dynamic obj)
{
    obj.meta1 = DateTime.Now;
    obj.meta2 = "acb";
    obj.meta3 = 123;
    obj.meta4 = "foo";
}

Type1 objtype1 = new Type1();
Type2 objtype2 = new Type2();
Type3 objtype3 = new Type3();

UpdateMeta(objtype1);
UpdateMeta(objtype2);
UpdateMeta(objtype3);

但是類型安全的泛型呢?確切的語法是什么? 這是我到目前為止的內容:

private void UpdateMeta<T>(ref T obj)
{
    obj.meta1 = DateTime.Now;
    obj.meta2 = "acb";
    obj.meta3 = 123;
    obj.meta4 = "foo";
}

Type1 objtype1 = new Type1();
Type2 objtype2 = new Type2();
Type3 objtype3 = new Type3();

UpdateMeta<Type1>(objtype1);
UpdateMeta<Type2>(objtype2);
UpdateMeta<Type3>(objtype3);

我查看了示例和文檔,但這主要是關於泛型類的。 我似乎語法不正確

您需要一個通用的基類或接口,然后只需向您的通用方法添加一個約束即可:

public interface ICommonInterface
{
   // declare your properties here
   // and don't forget to implement this interface in your classes
}

private void UpdateMeta<T>(T obj)
       where T : ICommonInterface
{
    obj.meta1 = DateTime.Now;
    obj.meta2 = "acb";
    obj.meta3 = 123;
    obj.meta4 = "foo";
}

正如評論中提到的那樣,在這種情況下甚至不需要使用泛型,因為您只需要更新某些屬性的值即可,您可以有一個采用參數類型為common interface的方法 。第一個代碼段中的通用接口或基類,您將獲得類型安全性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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