[英]C# - send class type as parameter in methods and create constructor in them
[英]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.