簡體   English   中英

如何在 C# 中發送參數類並從中創建新對象

[英]How to send parameter class and create new object from it in C#

是否可以在方法中發送參數類並從中創建新對象?

所以我想創建一個方法將返回通用對象列表。

這是和示例,我有 2 個類 Genre 和 Actors,這 2 個類有一個 sampe 屬性名稱。

流派類

public class Genre
{
    public string Name {get;set;}
}

演員班

 public class Actor
 {
     public string Name {get;set;}
 }

程序類

public class Program
{
    public static void Main()
    {
        string test = "Adam,John,dan";
        string test2 = "Comedy,Action";
        List<Genre> a=  ConvertStringToList<Genre>(test2);
        List<Actor> b=  ConvertStringToList<Actor>(test);
    }

    public static List<T> ConvertStringToList<T>(string genreList) where T :new()
    {
        List<T> genres = new List<T>();
        foreach(var str in genreList.Split(','))
        {
            string Name = str.Trim();
            genres.Add(new T(){Name});

        }
        return genres;
    }
}

在下面的代碼中,我無法使用new T()創建新對象並填充屬性。

解決這個問題的任何想法?

一種選擇是創建一個接口並將其用作約束

創建接口並實現:

public interface IName
{
    string Name {get;set;}
}


public class Genre: IName
{
    public string Name {get;set;}
}

public class Actor: IName
{
    public string Name {get;set;}
}

並使用:

where T : IName, new()

現在你可以這樣做:

var t = new T();
t.Name = name;

功能

另一種選擇是發送一個 Func,

將簽名更改為:

ConvertStringToList<T>(string genreList, Func<string, T> createFunc)

而不是new T() ,使用createFunc(name)

string name = str.Trim();
genres.Add(createFunc(name));

用法:

ConvertStringToList<Genre>(test2, name => new Genre{Name = name});

附注。 使用此方法時不需要new()約束

暫無
暫無

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

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