所有
有关用于开发ASP.NET应用程序的技术环境的详细信息:
我们有一个类,其中包含以下删除方法:
public IHttpActionResult Delete([FromODataUri] Edm.Guid id){...}
可悲的是,上述方法Edm.Guid抱怨以下错误:
类型或命名空间名称' Edm'找不到(你错过了使用指令或汇编引用吗?)
我无法删除Edm,因为上述代码是使用T4模板生成的,删除Edm会很痛苦。
无论如何,有些人可以告诉我这些代码将如何运作以使Edm得到认可吗?
- 的更新 我发现了一个非常规的解决方案,我不喜欢它,因为它具有不太复杂的意义,就像黑客一样。
在我的T4模板中,我有以下内容:
var keyParameters = string.Join(", ", keys[entityName].Select(key => "[FromODataUri] " + (key.TypeUsage.ToString()).Substring((key.TypeUsage.ToString()).IndexOf(".") + 1).Trim() + " " + code.Escape(key.Name).ToLower()));
...........
........
.....
public IHttpActionResult Delete(<#= keyParameters #>) {
...........
........
.....
它不够复杂,因为我正在做一些奇怪的字符串操作,以摆脱任何前缀为&#34; Edm。&#34; :
(key.TypeUsage.ToString()).Substring((key.TypeUsage.ToString()).IndexOf(".")
请随意提出更好的替代解决方案。
答案 0 :(得分:1)
看起来您正在尝试解析OData类型名称。这些是well-known,从名称到类型是usually parsed with a map,而不是字符串操作。以下内容可行:
var typeMap = new Dictionary<string, Type>
{
{ "Edm.Binary", typeof(Byte[]) },
{ "Edm.Boolean", typeof(Boolean) },
{ "Edm.Byte", typeof(Byte) },
{ "Edm.DateTime", typeof(DateTime) },
{ "Edm.Decimal", typeof(Decimal) },
{ "Edm.Double", typeof(Double) },
{ "Edm.Single", typeof(Single) },
{ "Edm.Guid", typeof(Guid) },
{ "Edm.Int16", typeof(Int16) },
{ "Edm.Int32", typeof(Int32) },
{ "Edm.Int64", typeof(Int64) },
{ "Edm.SByte", typeof(SByte) },
{ "Edm.String", typeof(String) },
{ "Edm.Time", typeof(TimeSpan) },
{ "Edm.DateTimeOffset", typeof(DateTimeOffset) },
}
var edmTypeName = "Edm.Guid";
var typeName = "global::" + typeMap.SingleOrDefault(t => t.Key.Equals(edmTypeName, StringComparison.CurrentCultureIgnoreCase)).Value.FullName;
Debug.Assert(typeName == "global::System.Guid");
话虽这么说,你可以通过别名System
命名空间来变得聪明。将using Edm = System;
添加到模板的顶部将适用于大多数基本类型,但这是一个黑客。