【问题标题】:How to get or read properties from a file in C#如何在 C# 中从文件中获取或读取属性
【发布时间】:2014-11-10 05:42:33
【问题描述】:

我在某个位置有一个.cs 文件。如何读取文件并仅从中提取属性?是否可以在不编译代码的情况下提取属性?我尝试使用Assembly.LoadFile()Assembly.LoadFrom() 类但不起作用!!!这是示例代码

using System;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.ComponentModel;
using System.Xml.Serialization;

namespace namespace1.Did
{       
    public class Class1
    {
        #region Variables

        private int _property1 = 14;
        private int _property2 = 16;

        #endregion

        #region Methods

        protected override void Initialize()
        {

        }

        protected override void OnBarUpdate()
        {
            // Have some code in this which uses System.Drawing and System.Drawing.Drawing2D dll's
        }

        #endregion

        #region Properties

        [Description("Demo1")]
        [GridCategory("Parameters")]
        public int Property1
        {
            get { return _property1; }
            set { _property1 = Math.Max(1, value); }
        }

        [Description("Demo2")]
        [GridCategory("Parameters")]
        public int Property2
        {
            get { return _property2; }
            set { _property2 = Math.Max(1, value); }
        }
        #endregion
    }
}

实际上我不想编译这段代码,因为如果我使用其他一些 dll,我需要将引用作为参数动态添加到 Csharpcodeprovider 类。如何仅从该 .cs 文件中获取属性?

【问题讨论】:

  • 您只需要财产名称吗?或者您是否尝试在代码中创建该类的实例并使用属性?
  • 我警告你,我的朋友:这是通往黑暗面的途径之一!您将不得不在文本、cmets、参数、命名等方面遇到很多麻烦,最后它可能不适用于其他情况或 C# 的下一代!您可能实现的最好的东西是现有的 C# 编译器,为什么不使用它并节省大量时间和精力和头痛?
  • “C# roslyn”是您搜索的良好开端...
  • @Alireza。我不想像你说的那样让自己处于“黑暗面”。我们公司对每个类、方法、属性等的命名约定遵循严格和标准的模式。我没有发布类、方法、属性等的实际名称,因为这些名称和代码不会向外界透露,应该严格保密。我希望你明白我的意思。
  • @Alireza 与 Java 与 JavaScript 相关的方式相同 :)

标签: c# .net .net-assembly system.reflection


【解决方案1】:

这样的匹配:

MatchCollection matches = Regex.Matches(input, @"public\s+(?<static>static\s+)?(?!class)(?<return>\w+)\s+(?<name>\w+)\s*\{", RegexOptions.Singleline);
foreach(Match match in matches)
{
    string propertyName = match.Groups["name"].Value;
    string returnType = match.Groups["return"].Value;
    bool isStatic = match.Groups["static"].Success;


}

这将在大多数情况下按预期工作,但是,它也会匹配注释中的属性和同一源文件中其他类中的属性。 您可能还需要考虑静态以外的其他修饰符,例如 virtual、abstract、override 和 volatile。 如果还需要获取 GridCategory 参数和 Description 参数,那真的是在自找麻烦,还需要知道是否有 get 和 set 参数。

但祝你的任务好运。

【讨论】:

    【解决方案2】:

    您只需将文件作为纯文本读取并使用 RegEx 或任何适合您需要的方式解析文本。既然您提到您不能共享文件结构(听起来很荒谬),您需要自己制定解析和过滤属性名称的机制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      • 2012-03-04
      • 2021-10-23
      • 1970-01-01
      • 2019-01-11
      • 2013-11-27
      • 2010-12-08
      相关资源
      最近更新 更多