c# - 我如何将静态字符串与对象类型关联 C#

标签 c# .net generics

我有一个查询 rest API 的方法,我在其中执行从 JSON 到对象的映射。由于我传递给此方法的查询字符串和对象类型始终必须匹配,因此我想将查询字符串作为静态字符串包含在内。

public class Root
{
    public static string Query;
}

public class RootObject : Root, IRootObject
{
    public D d { get; set; }
    public static new string Query = "AccountSet";
}

public interface IRootObject
{
    D d  { get; }
}

public class RestClass
{
     public void Connect<T>() where T : Root, IRootObject
     {    
        T.Query  <-- fails (not actual code. Just to show my problem)
     }  
}

最佳答案

您可以为此使用自定义属性:

[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
public sealed class QueryAttribute : Attribute
{
    public string QueryString { get; private set; }

    public QueryAttribute(string queryString)
    {
        QueryString = queryString;
    }

    public static string GetQueryStringForType(Type type)
    {
        var queryAttr = type.GetCustomAttributes(typeof(QueryAttribute), false)
                            .FirstOrDefault() as QueryAttribute;

        return queryAttr != null ? queryAttr.QueryString : null;
    }
}

在你的类(class)中使用它:

[Query("AccountSet")]
public class RootObject : Root, IRootObject
{
    public D d { get; set; }
}

然后像这样检索值:

public void Connect<T>() where T : Root, IRootObject
{
    var query = QueryAttribute.GetQueryStringForType(typeof(T));
}

关于c# - 我如何将静态字符串与对象类型关联 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28877317/

相关文章:

c# - 无法从 'method group' 转换为 'System.EventHandler'

.net - 在 .Net 中调用 Web 服务时绕过无效的 SSL 证书错误

java - 将扩展与 Java 泛型一起使用

swift - 在 Swift 中将协议(protocol)实现者升级为协议(protocol)的通用方法

c# - 自定义 C# 窗体设计

c# - Entity Framework v4 - 来自链接服务器的简单存储过程 Select 语句(打开查询)返回 -1

c# - WPF 数据网格 : IsVirtualizingWhenGrouping ="True" not working

c# - 如何从 .net 中 wwwroot 内的多个文件夹提供 html 文件

c# - 使用因消息类型而异的处理资源来消费队列的消息

c# - 我该如何重构这段代码?