如何在C#中将值添加到object类型的变量中

时间:2015-05-27 08:30:53

标签: c# object generics dictionary

现在我就是这就是实际代码的样子,即成功调试(运行):

object attributes = new object[] { 
                  "key1=value1",
                  "key2=value2",
                  "key3=value3",
                  "key4=value4",
                  "keyN=valueN" 
};

我有时需要更改值,所以我使用的是C#Dictionary,定义为:

public Dictionary<string,string> dAttributes=new Dictionary<string,string>();

我在字典中逐一添加KEY和VALUE。但是当我尝试进行类型转换(我认为不可能)或应用任何其他逻辑时,对象中的值名为&#34;属性&#34;没有采用适当的格式。

首先我尝试了这个:

object attributes = new object[]{dAttributes};

然后我这样做了:

            int i=0;
            string attribueKeyAndValues;
            attribueKeyAndValues = "";
            foreach (KeyValuePair<string,string> item in dAttributes)
            {
                if(i==(dealAttributes.Count-1))
                    attribueKeyAndValues+="\"" +item.Key+"="+item.Value+"\"";
                else
                    attribueKeyAndValues += "\"" + item.Key +"="+ item.Value + "\"" + ",";
                i++;
            }

            attributes = new object[] { attribueKeyAndValues };

现在这段代码无效,因为attribute将整个字符串作为单个值。更重要的是,当我调试代码并快速观察attribueKeyAndValues(在文本展示台中)中的值时,会显示"\key=value\","\key=value\"等等。

还有其他方法可以在attribute中添加值吗?

4 个答案:

答案 0 :(得分:1)

从字典转换为数组

attributes = dAttributes.Select(a=>a.Key+"="+a.Value).ToArray();

此处使用了共变数组转换(ToArray()返回string[],但可以将其分配给object[]变量)

但如果你真的需要object[],请进行投射

attributes = dAttributes.Select(a=>(object)(a.Key+"="+a.Value)).ToArray();
然后像attributes[0] = 1;这样的东西会起作用 (在第一种会抛出运行时异常的方法)

答案 1 :(得分:0)

您希望将字典中的键和值复制到字符串数组中。您的上一个代码示例创建了一个字符串,但是一个小修改将修复它:

int i=0;
var attributes = new object[dAttributes.Count];
string attribueKeyAndValues = "";
foreach (KeyValuePair<string,string> item in dAttributes)
{
    result[i] = item.Key + "=" + item.Value;
    i++;
}

顺便说一下,使用字符串数组而不是对象数组可能会更好:

int i=0;
var attributes = new string[dAttributes.Count];
string attribueKeyAndValues = "";
foreach (KeyValuePair<string,string> item in dAttributes)
{
    result[i] = item.Key + "=" + item.Value;
    i++;
}

最后,您可以使用LINQ:

执行此操作
var attributes = dAttributes.Select(item => item.Key + "=" + item.Value).ToArray();

或者,如果你真的需要它是一个对象数组而不是一个字符串数组,你可以这样做:

var attributes = dAttributes.Select(item => item.Key + "=" + item.Value).ToArray<object>();

答案 2 :(得分:0)

你可能想看一下动态对象,你可以随意添加你想要的任何东西(好吧,通常需要注意)。

您可以在此处找到有关他们的更多信息

然后您可以执行以下操作:

dynamic sampleObject = new ExpandoObject();
sampleObject.number = 10;
sampleObject.Increment = (Action)(() => { sampleObject.number++; });

答案 3 :(得分:0)

好的,在ASH的答案的帮助下,我与另外一位朋友成功地解决了这个问题,

public static class AttributeExtensions
    {
        public static object ToAttributeArray(this DAttributes dealAttr)
        {
            var objectsColl = dealAttr.dAttributes.Select(x => x.Key + "=" + x.Value);

            var objArray = objectsColl.Cast<object>();
            return  objArray.ToArray<object>();

        }
    }

现在它正常工作,谢谢你们:)