可以从变量字典填充变量类



我有以下函数:

public static bool PopulateModelByDictionaryOne()
{
var model = new ModelOne();
foreach (var Item in Data.DictOne)
{
model.Dictionary.Add(Item.Key, Item.Value);
}
return true;
}

字典是由模型设置的公共字典。

我想使这个类变量允许自定义模型和自定义 Data.Dict。我发现了以下内容(尚未测试):

var model = Activator.CreateInstance(Type.GetType(className));

其中类名是要传递给函数的变量。

问题:

1) 如何引用模型。本例中的字典(所有模型类都有一个字典)

2)如何使Data.DictOne成为变量?

我假设以下内容:

  1. 您有某种DataSource此数据源具有Dictionary某些数据类型的KeyValue

  2. 您有一个名为PopulateModelByDictionaryOne此方法采用的方法DataSourceParameter并创建某个实例的新实例 建模,然后填充类型为Dictionary的属性,其Key并且Value类型与DataSource类型匹配。

如果我的假设是正确的。您可以为模型创建泛型接口类型,IDicationaryDataModel<TKey,TValue>此接口包含IDictionary<TKey,TValue>类型的单个属性,因此您可以在实现此接口的任何模型上强制存在此属性。

public interface IDicationaryDataModel<TKey, TValue>
{
IDictionary<TKey,TValue> Dictionary { get; set; }
}

然后创建另一个泛型接口类型IDataSource<TKey,TValue>此接口将强制数据源上存在类型IDictionary<TKey,TValue>的属性。

public interface IDataSource<TKey,TValue>
{
IDictionary<TKey,TValue> DictOne { get; set; }
}

因此,您的模型将实现如下接口:

public class ModelOne : IDicationaryDataModel<string, string>
{
public IDictionary<string, string> Dictionary { get; set; }
}

您的数据源将实现如下接口:

public class DataSource : IDataSource<string, string>
{
public IDictionary<string, string> DictOne { get; set; }
} 

因此,您的方法是:

public static bool PopulateModelByDictionaryOne<TModel,TDataSource,TKey,TValue>(TDataSource dataSource)
where TModel:IDicationaryDataModel<TKey,TValue>,new()
where TDataSource:IDataSource<TKey,TValue>
{
var model = new TModel();
foreach (var Item in dataSource.DictOne)
{
model.Dictionary.Add(Item.Key, Item.Value);
}
return true;
}

这样,您可以根据需要自由选择数据源/模型对。您的方法尽可能通用,因为它可能是:)。此外,您可以传递模型的实例,而不是在此方法中实例化它,这样您就可以摆脱new()约束。通过使用该方法,您无需使用Reflection.

最新更新