如何知道某个类型是否已在C#中的另一个源文件中声明?

时间:2011-07-02 00:59:26

标签: c# file types c-preprocessor

我在C#中有一个源文件,它在自己的命名空间中包含项目的所有misc类型。例如:

#define HELPER_FILE

using System;

namespace Helper
{
    public struct NormalBalance : INormalType
    {
        public int Position { get; set; }
        public float Normal { get; set; }
    }

    ...

}

然后,其他文件使用这些类型。我想将其中一些分发给我团队中的其他人,但他们不需要所有文件或类型,但是共享一些数据结构。

例如:

using System;

namespace DataPump
{
    public class Pumper
    {
        private Helper.NormalBalance[] norm;

        ...
    }

    ...

}

但是这段代码依赖于包含Helper.NormalBalance类型的前一个文件。我想要一个方法同步文件,以便知道另一个的存在,就像在C ++中我们可以在声明类型的文件中使用#define指令,如果客户端文件没有看到令牌定义,它将有条件地编译类型如下:

(C ++代码如下)

    class Pumper
    {

    private:

#ifndef HELPER_FILE
        struct NormalBalance
        {
            int Position;
            float Normal;
        }

        NormalBalance[] norm;

#else

        Helper.NormalBalance[] norm;

#endif

        ...
    }

    ...

}

不幸的是,C#中的#define指令范围只是声明它的文件。有没有办法在C#中做到这一点?我需要知道文件是否包含在项目中,或者至少是否已经预先定义了一个类型,如果没有,则再次定义它。

2 个答案:

答案 0 :(得分:3)

在.NET Framework上,如果您希望共享类型库,我建议将它们打包到一个项目中。构建时,它将成为可以像任何其他程序集一样引用的程序集。定义指令用于不同的目的,很少这样。它们不像C ++开发那么普遍。

答案 1 :(得分:0)

您可以在项目级别定义“条件编译符号”。

但不要这样做。将源代码构建到程序集并共享所有类型更容易,更方便。尝试ifdef部分会给你带来很多麻烦,并且只要部分相交,整合2个使用内联部分代码的程序集就会成为噩梦。你只是不想让你头疼。