0

だから私は名前空間を持っています:

namespace Main
{
  Class DoStuff
  {
    Code...

    var tableVars = new Dictionary<string, tableObject>();

    Code...

    string insertResponse = MyDLL.Insert(someString, tableVars, someString);

    Code../

  }
  public class tableObject
  {
    public string Name { get; set; }
    public string Type { get; set; }
    public string Value { get; set; }
    public string Default { get; set; }
  }
}

そして、2 番目の名前空間があります。

namespace MyDLL
{
  public static string Insert(string table, Dictionary<string, tableObject> tableVars, string connection)
  {
    Code...
  }
}

最初の名前空間 Main には、2 番目の名前空間 MyDLL への参照があります。Main 名前空間を参照せずに DLL にカスタム オブジェクトを認識させるにはどうすればよいですか (循環参照が発生するため)。

var キーワードも使用してみましたが、この場合は機能しません。

namespace MyDLL
    {
      public static string Insert(string table, var tableVars, string connection)
      {
        Code...
      }
    }
4

2 に答える 2

3

すべての一般的な型 (この場合は tableObject) を 3 番目の dll に移動し、両方の上位アセンブリから参照します

于 2013-02-21T14:55:15.197 に答える
1

昨日、.NET 4.0 で導入された ExpandoObject について読んでいました。このオブジェクト タイプを使用すると、実行時にオブジェクトを動的に作成し、そのオブジェクトを別の名前空間に渡すことができます。

パフォーマンスの問題が発生する可能性があるため、これは完全な解決策ではありません (Expando オブジェクトが静的オブジェクトほど高速であるとは信じられません)。また、すべてのフィールドが追加されていることを確認するためのコンパイル (または実行) 時のチェックもありません。

Dynamic/ExpandoObject は、オブジェクトへのメソッドの追加もサポートしています。

ただし、サンプルソースは次のとおりです。

    void Method1()
    {


        var tableVars = new Dictionary<string, dynamic>();

        dynamic sampleObject = new ExpandoObject();
        sampleObject.Name = "Count";
        sampleObject.Type = "Int32";
        sampleObject.Value = "4";
        sampleObject.Default = "0";

        tableVars.Add("Sample", sampleObject);

        Insert("TableName", tableVars, "Connection");


    }

    string Insert(string table, Dictionary<string, dynamic> tableVars, string connection)
    {

        foreach (var v in tableVars)
        {
            Console.Write("Name is: ");

            Console.WriteLine(v.Value.Name);

        }

        return "";
    }

状況によっては、@Benny が彼の回答で示したようにしたほうがよい場合もありますが、選択肢として DLR の要素を導入したかったのです。

于 2013-02-21T15:18:26.243 に答える