【问题标题】:Add attribute to method without modifying the code file containing the method?在不修改包含该方法的代码文件的情况下向方法添加属性?
【发布时间】:2015-09-13 07:24:08
【问题描述】:

有没有办法在不修改类文件的情况下为方法添加属性?

例如我正在导入一个 WSDL,它会生成一个 Reference.cs,其中包含一个带有方法的代理类。

我已经编写了一个属性,它为我做了一些工作,并将其添加到如下方法中,一切正常:

Reference.cs 文件

public partial class Whatever
{
    [MyCustomAttrubute()]
    public void MyMethod(string bleh)
    {
        // do stuff
        return;
    }
}

但是,我的问题是,如果 WSDL 发生更改,我将需要更新它,这将自动丢失我对 Reference.cs 所做的所有更改。我可以将此属性添加到另一个文件中的方法吗?

【问题讨论】:

  • 一般情况下没有...有关属性,请参阅stackoverflow.com/q/3782405/613130... 有一个通过MetadataTypeAttribute 的黑客攻击,但它只能由一些知道它的类使用。
  • 我不确定,但您的自定义(稍作修改)T4 模板似乎可以为您提供帮助。
  • 如果你喜欢痛苦的世界,你可以试试dynamically generated code and compiling

标签: c# attributes service-reference


【解决方案1】:

如果你的另一个方法也是一个字符串,你能不能把另一个方法连接到这个?换句话说,当您调用 MyMethod(string bleh) 时,只需传递连接到它的 2 个字符串。

例如: 我的方法(string1 + "|" + string2);

这将传递与管道连接的 2 个参数,然后在您可以使用的方法中

字符串[] vals = val.Split('|');

这会给你一个传递参数的数组。这样你也可以传递两个以上的参数。

那么你可以得到参数:

sting para1 = vals[0]; sting para2 = vals[1];

【讨论】:

  • Reference.cs 是一个自动生成的文件,它是在您导入 WSDL 时创建的,属性相当复杂,我需要它作为属性。
  • 然后在将其作为字符串传递之前对其进行序列化,并在另一端将其反序列化。
  • 这不是问题的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
相关资源
最近更新 更多