【问题标题】:Get var type value in C#在 C# 中获取 var 类型值
【发布时间】:2016-03-16 19:21:13
【问题描述】:
var temp = toCheck.GetData(DataFormats.FileDrop);

我的程序中有上面的代码。 toCheck 是一个 IDataObjecct 包含一个文件(具体的图像)路径。

当我调试时,我看到存储在下面的值:
临时 -> {string[1]}
[0] -> "C:\.. 路径的其余部分"

一切都是正确的,但是当我尝试访问里面的字符串时,我不能。如果我使用 toString() 方法,它返回 System.String[] 但不返回文件路径。
关于如何检索变量内的文件路径的任何建议?

【问题讨论】:

    标签: c# .net var idataobject


    【解决方案1】:

    temp -> {string[1]} 表示 temp 是 string 类型的数组,具有一个元素。

    [0] -> "C:\....rest of path"表示索引0处的元素等于路径。

    由于GetData 返回装箱为object 的字符串数组,因此您还必须先将其拆箱。然后您可以像这样简单地访问该元素:

    string[] strArr = temp as string[];
    string s = temp[0];
    

    【讨论】:

    • 谢谢Gunther,我应该提到我试过这个。当我设置字符串 s = temp[0];我收到以下错误:无法使用 [] 对“对象”类型的表达式应用索引这就是我的困惑所在。我认为访问字符串是 temp[] ,但似乎并不那么容易。
    • @user4238148 糟糕!忘记了 object 的拆箱。我更新了答案。
    【解决方案2】:

    temp 是一个字符串数组,这就是你得到它的原因。如果要获取数组的第一个字符串,则:

    var mystring = temp[0];
    

    应该这样

    您还可以检查 string[] 是否有任何字符串:

    if(temp.Length > 0) myString = temp[0];
    

    其中myStringstring 类型的变量

    【讨论】:

    • 如果您详细说明为什么可以解决他的问题,这将是一个更好的答案
    • 你应该解释为什么应该这样做
    • 我觉得现在好多了
    【解决方案3】:

    我找到了答案!

    string[] arr = ((IEnumerable)temp).Cast<object>().Select(x => x.ToString()).ToArray();
    

    使用上述语句,您可以从类型对象转到字符串数组。
    您需要包含 using.System.Linq 才能使其正常工作。

     var temp = toCheck.GetData(DataFormats.FileDrop);
            string[] arr = ((IEnumerable)temp).Cast<object>().Select(x => x.ToString()).ToArray();
            string path = "";
    
            foreach(string a in arr)
                path = a;
    

    如果有人好奇的话,这最终就是所有的代码。我遍历数组,因为否则它会在我调试时跳过函数的其余部分。不确定是什么原因造成的,但这有效。谢谢大家的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2013-02-13
      • 2010-12-20
      • 2018-12-25
      • 2017-06-15
      • 1970-01-01
      相关资源
      最近更新 更多