Type t = obj.GetType();
t.IsEnum;
t.IsPrimitive;
t.IsGenericType
t.IsPublic;
t.IsNestedPublic
t.BaseType
t.IsValueType
上記のプロパティはすべてUWPにはありません。これらのタイプは現在どのようにチェックするのですか?ユニバーサル・ウィンドウ・プラットフォーム(UWP)不足プロパティのリフレクション
Type t = obj.GetType();
t.IsEnum;
t.IsPrimitive;
t.IsGenericType
t.IsPublic;
t.IsNestedPublic
t.BaseType
t.IsValueType
上記のプロパティはすべてUWPにはありません。これらのタイプは現在どのようにチェックするのですか?ユニバーサル・ウィンドウ・プラットフォーム(UWP)不足プロパティのリフレクション
UWPをターゲットとするC#アプリは、2つの異なるセットのタイプを使用します。あなたはSystem.Stringのような.NETの型をすでに知っていますが、UWP固有の型は実際にはフードの下のCOMインタフェースです。 COMはinteropのスーパーグルーです.JavaScriptやC++でUWPアプリケーションを書くことができる基本的な理由です。そして、C#、WinRTはその中心にある管理されていないAPIです。
.NET Frameworkに組み込まれたWinRT用言語投影は、その厄介な小さな詳細を非常に目立たなくします。いくつかのWinRTタイプは、Windowsネームスペースなど、何かを識別するのが簡単です。いくつかはどちらでもかまいませんが、System.Stringは.NETタイプとWinRT HSTRINGの両方をラップすることができます。 .NET Frameworkは、それを自動的に把握します。
非常に目に見えませんが、スパークルにはいくつかの亀裂があります。 Typeクラスはその1つですが、Reflection for COMタイプは難しいです。 Microsoftは両者の大きな違いを隠すことができず、TypeInfo classを作成しなければならなかった。
不足しているプロパティがすべてそのクラスに戻ってきます。 UWPアプリでの仕事でそれを示していくつかの愚かなサンプルコード:このコードのVSの出力ウィンドウの
using System.Reflection;
using System.Diagnostics;
...
public App()
{
Microsoft.ApplicationInsights.WindowsAppInitializer.InitializeAsync(
Microsoft.ApplicationInsights.WindowsCollectors.Metadata |
Microsoft.ApplicationInsights.WindowsCollectors.Session);
this.InitializeComponent();
this.Suspending += OnSuspending;
// Reflection code...
var t = typeof(string).GetTypeInfo();
Debug.WriteLine(t.IsEnum);
Debug.WriteLine(t.IsPrimitive);
Debug.WriteLine(t.IsGenericType);
Debug.WriteLine(t.IsPublic);
Debug.WriteLine(t.IsNestedPublic);
Debug.WriteLine(t.BaseType.AssemblyQualifiedName);
Debug.WriteLine(t.IsValueType);
}
コンテンツ:
False
False
False
True
False
System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e
False
詳細な応答をありがとう。これは私を正しい方向に向けるでしょう。 – Matt
'Windows.Foundation.Metadataのクラスとメソッドを使用します'名前空間。例えば。 Windows.Foundation.Metadata.ApiInformation.IsMethodPresent'。 –
@RaymondChenポインタのおかげで、上記のプロパティを確認する方法は?使用可能なメソッドは、メソッド、イベント、プロパティ、および型の存在をチェックするためだけです。 – Matt
タイプ名は分かっていますが、それが何であるかわからない場合は、 'ApiInformation.IsEventPresent'、次に' ApiInformation.IsMethodPresent'、 'ApiInformation.IsPropertyPresent'などを呼び出すことができます。何かが'本当です。 C#から 'IInspectable.GetRuntimeClassName'にどうやって行くのか不明です。一般的に、コードはリフレクションを介して判断しようとするのではなく、そのコードが持つものを知る必要があります。あなたが反射を持っていても、あなたは何をしますか? 「これは列挙型だとわかっています。」だから何?列挙型の値がどういう意味か分かりません。 –