在 C#.NET 中动态转换为类型

2024-02-22

替代标题:在运行时动态转换为类型。

我想将对象转换为将在运行时分配的类型。

例如,假设我有一个分配字符串值的函数(来自TextBox or Dropdownlist) to an Object.Property.

我如何将值转换为正确的类型?例如,它可以是整数、字符串或枚举。

Public void Foo(object obj,string propertyName,object value)
{
  //Getting type of the property og object.
  Type t= obj.GetType().GetProperty(propName).PropertyType;

  //Now Setting the property to the value .
  //But it raise an error,because sometimes type is int and value is "2"
  //or type is enum (e.a: Gender.Male) and value is "Male"
  //Suppose that always the cast is valid("2" can be converted to int 2)

  obj.GetType().GetProperty(propName).SetValue(obj, value, null);
}

您需要使用 Convert.ChangeType(...) 函数 [注意:在下面的函数中,输入 propertyValue 可以很容易地成为对象类型...我刚刚预制了一个字符串版本]:

/// <summary>
/// Sets a value in an object, used to hide all the logic that goes into
///     handling this sort of thing, so that is works elegantly in a single line.
/// </summary>
/// <param name="target"></param>
/// <param name="propertyName"></param>
/// <param name="propertyValue"></param>
public static void SetPropertyValueFromString(this object target,               
                              string propertyName, string propertyValue)
{
    PropertyInfo oProp = target.GetType().GetProperty(propertyName);
    Type tProp = oProp.PropertyType;

    //Nullable properties have to be treated differently, since we 
    //  use their underlying property to set the value in the object
    if (tProp.IsGenericType
        && tProp.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
    {
        //if it's null, just set the value from the reserved word null, and return
        if (propertyValue == null)
        {
            oProp.SetValue(target, null, null);
            return;
        }

        //Get the underlying type property instead of the nullable generic
        tProp = new NullableConverter(oProp.PropertyType).UnderlyingType;
    }

    //use the converter to get the correct value
    oProp.SetValue(target, Convert.ChangeType(propertyValue, tProp), null);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C#.NET 中动态转换为类型 的相关文章

随机推荐

  • 是否可以在 postgresql 命令中引用环境变量?

    例如 假设我想从运行 postgres 服务器的同一台计算机上的路径导入 CSV 文件 有一个环境变量MyPath在系统上设置为 path to my csv file 我可以轻松导入此 CSV 文件 如下所示 COPY MyTable F
  • Python 中 *tuple 和 **dict 是什么意思? [复制]

    这个问题在这里已经有答案了 正如 PythonCookbook 中提到的 可以添加在元组之前 什么是 意思是这里 第 1 18 章 将名称映射到序列元素 from collections import namedtuple Stock na
  • Weblogic 12c (12.1.3) - 字符串索引超出范围:51968

    我正在尝试部署一个Spring BootWeblogic 12 1 3 上的 Web 应用程序 当我从控制台部署时 我收到以下错误 在应用程序上 Message icon Error Unable to access the selecte
  • 如何区分页面刷新和关闭页面

    我有一个网络应用游戏 在游戏中我想拥有它 这样如果用户关闭页面或浏览器 它会自动注销 我尝试使用附加到窗口的 onbeforeunload 事件 window onbeforeunload function perform logout f
  • WCF / WebService充当MQ消息的侦听器?

    也许我找错了方向 但我有一组服务 WebAPI 和 WCF 它们使用 WebSphere MQ 与其他系统交互 这没有问题 直到我现在需要找到一种方法listening对于队列之一上的消息 这是否可能 或者我是否需要走 Windows 服务
  • Retrofit 2.0:无法为类创建调用适配器

    我正在使用 Retrofit 2 0 beta1 如何发出简单的同步请求并将 JSON 响应反序列化为 POJO 列表 这是我的界面 public interface ArticlesAPI GET articles List
  • Python递归挑战[已关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我目前正在上Python和计算理论入门课 最近期中考试中有一道难题我根本无法解决 它涉及为添加数字的程序编写代码 我相信这个问题应该使
  • 通过 api 访问 Wikimedia Commons 上的版权信息

    我想使用 MediaWiki API 来获取图像的版权信息 当您单击维基百科中的图像时 将打开包含该图像的页面 其中包含 更多详细信息 按钮 单击此按钮 您将进入一个包含 在网络上使用此文件 链接的页面 单击此链接 运行脚本 stockPh
  • C# 中析构函数有必要吗?

    我有一个担忧 我是计算机科学专业的一年级学生 通常我在课堂上很好奇 但老师并不总是有答案 或者并不总是知道答案 C 中析构函数有必要吗 我的意思是 如果我必须像通常对构造函数那样实现析构函数方法 这是一个好的做法还是我可以避免它并且垃圾收集
  • macOS 钥匙串 ACL 如何确定哪些应用程序具有访问权限?

    当应用程序将项目保存到钥匙串时 macOS 会将该应用程序添加到访问控制列表中 以便您的应用程序稍后可以访问它 如果您尝试从其他应用程序访问该项目 macOS 将显示系统提示 询问用户是否允许访问 这是有记录的here https deve
  • sockaddr_in 未声明的标识符

    我正在遵循 beej 的网络指南 进展非常顺利 因为我对一切都很了解 而且他解释得很好 然而 当我想测试他向我展示的一些很酷的东西时 这是行不通的 我不确定 sockaddr in 到底在哪里声明 但也许这里有人会帮助我 这是我到目前为止所
  • Office 文档提示登录匿名 SharePoint 网站

    我有一个配置为匿名访问的 MOSS 07 站点 该站点内有一个文档库 也启用了匿名访问 当匿名用户单击该库中的 PDF 文件时 他或她可以毫无问题地阅读或下载该文件 当用户单击 Office 文档时 系统会提示他或她登录框 用户可以在不登录
  • 内联 MSIL/CIL

    我创建了以下简单方法 public static void Main Console WriteLine Hello world Console ReadKey true 然后我使用ILSpy获取MSIL代码 method public h
  • System.InvalidOperationException:无法解析类型依赖注入.net core web api的服务

    System InvalidOperationException 尝试激活 Pwc EMSWebapi UserManagementController 时无法解析类型 Pwc EMSWebapi IUserManagementServic
  • 如何从一组用户中提取电子邮件

    If I do User all pluck email 然后就可以正常工作了 但如果我这样做 arr Array new arr User all and then arr pluck email 这引发了以下错误 undefined m
  • 重写构造函数类

    下面是我的代码 我不明白这是什么错误 有谁可以指导一下吗 class State static String country static String capital State Constructor country America s
  • 连接两个向量同时转换一个向量的元素的最佳方法是什么?

    假设我有 std vector
  • wget:无法解析主机地址“github.com”

    我正在使用 Redhat UBI 映像构建 dockerfile 当我构建映像时 我得到 wget 无法解析主机地址 github com 我尝试添加一个不以 GitHub 开头的不同 URL 但该 URL 有效 不确定是什么问题 以下是我
  • NSFetchedResultsController 在 objectAtIndexPath 上崩溃?

    我在尝试访问以下对象时发生崩溃NSFetchedResultsController 2013 11 10 15 15 06 568 Social 11503 70b CoreData error Serious application er
  • 在 C#.NET 中动态转换为类型

    替代标题 在运行时动态转换为类型 我想将对象转换为将在运行时分配的类型 例如 假设我有一个分配字符串值的函数 来自TextBox or Dropdownlist to an Object Property 我如何将值转换为正确的类型 例如