可以从变量字典中填充变量类[关闭]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可以从变量字典中填充变量类[关闭]相关的知识,希望对你有一定的参考价值。
我有以下功能:
public static bool PopulateModelByDictionaryOne()
{
var model = new ModelOne();
foreach (var Item in Data.DictOne)
{
model.Dictionary.Add(Item.Key, Item.Value);
}
return true;
}
Dictionary是由模型设置的公共字典。
我想使这个类变量允许自定义模型和自定义Data.Dict。我找到了以下(尚未测试):
var model = Activator.CreateInstance(Type.GetType(className));
其中className是传递给函数的变量。
问题:
1)我如何引用model.Dictionary在这种情况下(所有模型类都有一个字典)
2)如何制作Data.DictOne变量?
我假设如下:
- 你有某种
DataSource
这个数据源有一个Dictionary
与Key
和Value
的某些数据类型 - 你有一个名为
PopulateModelByDictionaryOne
的方法,这个方法将DataSource
作为Parameter
并创建某个模型的新实例,然后填充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;
}
这样,您可以随意选择DataSource / Model对。你的方法尽可能通用:)。此外,您可以传递模型的实例,而不是在此方法中实例化它,这样您就可以摆脱new()
约束。通过使用该方法,您不需要使用Reflection
。
以上是关于可以从变量字典中填充变量类[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
将数据从片段列表视图项传递到活动字符串变量 onitemclicklistener
将变量从 WordPress PHP 传递到 JavaScript
python :列表 字典 集合 类 ----局部变量可以改全局变量