C#将对象强制转换为存储在字符串变量中的另一种类型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#将对象强制转换为存储在字符串变量中的另一种类型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1985字,纯文字阅读大概需要3分钟。
内容图文
我有MyWord类以及从MyWord继承的许多其他类,例如Noun,Idiom等.
我将这些对象存储在一个列表中:
List<MyWord> Dictionary;
当我向列表中添加新元素时,我会这样:
var myWord = new MyWord(id, word, definition,type,DateTime.Now.ToShortDateString());
Dictionary.Add(myWord);
如您所见,我在其中放置了MyWord对象.我希望能够创建例如Noun对象并将其放入列表中,如下所示:
var myWord = new Noun(id, word, definition, type, DateTime.Now.ToShortDateString());
Dictionary.Add(myWord);
type参数是字符串,例如“ noun”.我使用此方法基于此字符串获取Type:
private Type GetFullType(string myType)
{
//Returns list of all types that inherit from MyWord class
var supportedTypes = (AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(assembly => assembly.GetTypes())
.Where(type => type.IsSubclassOf(typeof(MyWord)))).Select(x => x.FullName).ToList();
return Type.GetType(supportedTypes.Find(x => x.Contains_SkipWhiteSpacesIgnoreCase(myType)));
}
现在,我不知道如何使用GetFullType()返回值将MyWord转换为Noun.像这样:
Type wordType = GetFullType(type);
var myWord = new MyWord(id, word, definition, type, DateTime.Now.ToShortDateString());
Dictionary.Add((wordType)myWord);
我希望我能清楚地解释自己.
请注意,我可以使用If … else结构来创建用于检查类型变量的不同对象,但这不是一个很好的解决方案.还有更好的主意吗?
解决方法:
您可以使用Activator.CreateInstance创建类型的实例.查看https://msdn.microsoft.com/en-us/library/wccyzw83(v=vs.110).aspx
var myword = Activator.CreateInstance(wordType);
然后,您可以使用反射或将其强制转换为基类MyWord来设置其属性.
或者,您可以在wordType上使用反射来找到其构造函数并进行调用.
但是实际上,是否有很多单词类型不容易(而且快得多)来维护Dictionary <string,func <="" <string,string,wordtype>在哪里可以查询单词类型并获得一个功能,该功能可以从单词和定义值中为您找到一个?="" p="">
wordFactories["noun"](word, definition);
另一种选择是使用来自Nuget的Impromptu.Interface,它可以将任何动态对象包装在接口中,并使它具有相同的行为.在我的.NET自然语言引擎中,这就是我用来从数据库中提取一个单词,然后将其包装为INoun,IPluralNoun,IMammal等的功能.
内容总结
以上是互联网集市为您收集整理的C#将对象强制转换为存储在字符串变量中的另一种类型全部内容,希望文章能够帮你解决C#将对象强制转换为存储在字符串变量中的另一种类型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。