现在我就是这就是实际代码的样子,即成功调试(运行):
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
中添加值吗?
答案 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>();
}
}
现在它正常工作,谢谢你们:)