我在select allproc.name from sys.procedures allproc
outer apply (
select object_name(p.object_id) used_in_procname from syscomments c
join sys.procedures p on p.object_id = c.id
and p.object_id != allproc.object_id
where c.text like concat('%',allproc.name,'%')
) usages where used_in_procname is null
循环中遇到错误,我不明白为什么。
你能帮我吗?
这是给我的一个小项目。
json:
foreach
c#:
{
"buttonByColumn": 1,
"buttonByLine": 1,
"iconSize": 100,
"settingsbutton": 1,
"settingsshortcut": "Escape",
"buttons": {
"button1": {
"name": "test",
"type": "",
"path": "",
"shortcut": "E",
"iconPath": ""
}
}
}
错误:
$ exception {“'Newtonsoft.Json.Linq.JProperty'不包含对”快捷方式“的任何定义””} Microsoft.CSharp.RuntimeBinder.RuntimeBinderException
答案 0 :(得分:0)
在您的JSON中,buttons
不是数组;它是一个对象。因此,您的foreach
循环实际上是在buttons
对象的 properties 上进行迭代,该对象的第一个(也是唯一的)属性是button1
。 shortcut
在button1
对象内部;它不直接位于buttons
内部,因此这就是您遇到错误的原因。由于item
实际上是一个JProperty
,因此您需要使用Value
访问器来访问shortcut
。
尝试像这样:
kc[i] = (Keys)Enum.Parse(typeof(Keys), (string)item.Value.shortcut);
还要注意,您的kc
数组的大小可能不够大:您正在为settingsshortcut
使用一个额外的元素。因此,您可能需要为此添加一个帐户。