c# - 获取属性Type并将String转换为对应的Type

标签 c# csom

我正在使用 CSOM 更新 Project Server 项目的一些任务。

未定义必须更新哪个属性,代码会根据属性名称(如字符串)动态找出要更新的内容。

为了更好地理解,我使用了简化版的代码

//fieldName = "ActualWorkTimeSpan"; value = "16:00:00";
private void Start(string fieldName, string value)
{
    DraftTask draftTask = GetDraftTask();

    Update(draftTask, fieldName, value);

    PublishAndCheckin(draftTask);
}

private static void Update(DraftTask draftTask, string fieldName, string value)
{
    // skip updating if field is Equal
    if (GetPropValue(draftTask, fieldName).ToString() == value)
        return;

    // update of the task
    SetPropValue(draftTask, fieldName, value);

}

private static object GetPropValue(object src, string propName)
{
    return src.GetType().GetProperty(propName).GetValue(src, null);
}

private static void SetPropValue(DraftTask src, string propName, object value)
{
    src.GetType().GetProperty(propName).SetValue(src, value);
}

我可以毫无问题地使用 GetPropValue(),但对于 SetPropValue(),我需要值的类型正确。

在这种情况下,属性“ActualWorkTimeSpan”的值为“System.TimeSpan”。所以我需要将字符串“15:00:00”转换为 TimeSpan。

如果每次都是 TimeSpan 会很容易做到,但我可能是“成本”字段设置为更新。

Update(draftTask, "Cost", "500");

所以我的问题是是否有可能找出该字段的类型并将我的值转换为相同的类型。

最佳答案

我使用 TypeDescriptor.GetConverter 这需要 Type并返回 TypeConverter知道如何转换 string到指定的 Type .

然后您可以调用 TypeConverter.ConvertFromString 将字符串转换为所需的 Type .

您的代码如下所示:

var propType = src.GetType().GetProperty(propName).PropertyType;
var converter = TypeDescriptor.GetConverter(propType);
var convertedObject = converter.ConvertFromString(src);

关于c# - 获取属性Type并将String转换为对应的Type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47331096/

相关文章:

c# - .Net 中的字符串比较 : "+" vs "-"

c# - 为什么我的 List.GetUserEffectivePermissions() 方法不起作用?

javascript - 存储 SharePoint 托管应用程序的属性

c# - 等效的 LINQ to SQL 代码

c# - 多对多关系更新 : Cannot insert duplicate key

javascript - 共享点 2013 : How can I read Site column contents and modify them via javascript csom?

sharepoint - 尝试通过 CSOM 更新列表项时出现 "Version conflict."错误

sharepoint - 如何使用 CSOM 检索特定类型的站点?

c# - 在 C# 中找出两个日期的差异

c# - ASP.NET Core RC1 - WebAPI Swagger 集成 - "Error"SchemaValidationMessages