2016-12-27 19 views
1

IronPythonのC#で構築されたオブジェクトに対して、特定のプロパティオーバーロード(メソッドオーバーロードではありません)を呼び出そうとしています。私はそうのようにそれを呼び出すPythonからC#で特定のプロパティのオーバーロードを呼び出す

enter image description here

famInst.FromRoom 

それはオブジェクトIronPython.Runtime.Types.ReflectedIndexerを返すここで利用できる2つのオーバーロードがあります。それが例外をスロー"unexpected object "]""

famInst.FromRoom.Overloads[]() 

:私はOverloadsを使用しようとすると、それは例外をスローします。

このプロパティのオーバーロードを指定する方法はありますか?

+0

これを試してみてくださいそのドキュメント – CodingYoshi

+0

に私のリンクを与えてください:との問題があるように[OK]を、それが見えますhttp://www.revitapidocs.com/2017/ea6bc434-d938-d0e5-ecc3-33e37dbf1d1b.htm – konrad

+0

それのRevit APIとIronPython実装。これは既にここで議論されています:http://stackoverflow.com/questions/39001482/revitapi-ironpython-toroom-returns-indexer-objectそれにはまだ答えがないようです。 – konrad

答えて

1

C#ではプロパティのオーバーロードがありません。あなたが求めているのはインデクサです。

public class Foo 
{ 
    SomeObject this[int index] 
    { 
     // The get accessor. 
     get 
     { 
      // return the value specified by index 
     } 

     // The set accessor. 
     set 
     { 
      // set the value specified by index 
     } 
    } 
} 

次のように私は配列のようFooを扱うことができることを意味:ここではインデクサーの例がある

ドキュメントはこの持っているあなたの場合
var f1 = new Foo(); 
SomeObject someObj = f1[1]; 

public Room this[ 
    Phase phase 
] { get; } 

何つまり、FamilyInstanceにはPhaseのインスタンスをとり、Roomを返すインデクサーがあります。だから、あなたはこのようにそれを使用します。

// If phase is abstract then new the concrete type. I am not familiar with revit API 
var somePhase = new Phase(); 
famInst[somePhase]; 

それとも、それは名前のインデクサーであることから、これを行うことができます。

famInst.FromRoom[somePhase]; 

他の一つは、プレーン財産であり、このように文書化:

public Room FromRoom { get; } 

あなたが唯一のそのプロパティにアクセスすることができますが、あなたはこのようにそれを設定することはできません。

Room room = famInst.FromRoom; 

基本的に、インデクサーを使用すると、クラスが配列でなくても配列のように扱うことができます。この場合、FamilyInstanceは配列のように扱うことができます。例えば、インデクサーを持っている.NETの多くの種類がありますが、Stringは、このようなインデクサーがあります。

public char this[int index] { get; } 

それはそれを取るにし、そのインデックスでcharを返すか、インデックスが外にある場合、それは例外をスローします範囲。

+0

あなたが言っているのは、 'FromRoom'プロパティにアクセスする2つの方法があると仮定して私が間違っていたということです。私は、 'famInst.FromRoom [phase]'のように、Indexを引数としてPhaseを入力する必要があるのは1つだけです。なぜそれらの2つがドキュメントに記載されていますか?それは私を混乱させた。 – konrad

+0

あなたは正しいですか?そのうちの1つは、「部屋」を返すプロパティです。もう一つは 'Phase'を取って 'Room'を返すインデクサーです。私のコードでは、 'Phase'を取る方法にアクセスする方法を示しました – CodingYoshi

+0

私は他のものをどう呼び出すことができるか考えていますか?なぜなら、それは私にインデクサーを呼び出すことができるからです。答えることができれば幸いです。 – konrad

関連する問題