2012-12-08 22 views
13

私はC#クラスを使用しており、Windowsストアアプリケーション(C#)では正常に動作します。私はWindowsランタイムCompenentでそれを使用しようとすると、しかし、私は次のエラーを取得する:クラスの'System.DateTime'は有効なWindowsランタイムパラメータタイプではありません

Calculator.Calculate(System.DateTime)' has parameter 'dateTime' of type 'System.DateTime'. 'System.DateTime' is not a valid Windows Runtime parameter type.

サンプルオブジェクト:

public DateTime Calculate(DateTime dateTime) 
{ 
    int dayNumberOfDateTime = ExtractDayNumber(dateTime); 
    int sunRiseInMinutes = CalculateSunRiseInternal(tanSunPosition, differenceSunAndLocalTime); 
    return CreateDateTime(dateTime, sunRiseInMinutes); 
} 

私はこの問題を解決するにはどうすればよいですか?そして何が問題なの?

+1

パブリックから内部に変更するとどうなりますか? –

答えて

25

Windowsランタイムコンポーネントを作成すると、コンポーネントはJavascriptやC++などの管理されていない言語で使用できます。明らかに、これらの言語は適切なSystem.DateTimeを生成する方法を知らないため、特定の.NETタイプです。

このようなコンポーネントは、WinRTのネイティブWinRTタイプのみを使用する必要があります。 Get-goから実行するこのような制限の1つは、WinRTが実装の継承をサポートしていないことです。あなたのクラスを宣言する必要がありますシール

ネイティブのWinRTタイプは、.NETタイプと非常に異なります。日付を格納できる実際の実行時の型は、Windows.Foundation.DateTimeです。文字列は実際にはHSTRINGハンドルです。リストは実際にIVectorです。 Etcetera。

実際にこれらのネイティブタイプを使用する必要があるのであれば、プログラムはもはや.NETプログラムに似ていないことは言うまでもありません。 CLRの.NET 4.5バージョンには、の言語投影が組み込まれています。WinRTタイプを同等の.NETタイプに自動的に変換するコード。その変換にはざらつきがあり、簡単に代用することはできません。しかし、それらの大部分は問題なくマップされます。

System.DateTimeはこのような粗いエッジの1つです。 Windows.Foundation.DateTimeの言語投影はSystem.DateTimeOffsetです。だから、単純にこのようなあなたの方法を宣言することで、あなたの問題を解決:

public DateTimeOffset Calculate(DateTimeOffset dateTime) { 
    // etc.. 
} 

注目に値する唯一の他の点では、これが唯一の他のコードを使用する可能性のあるメンバーのために必要とされることです。パブリックメンバー。

関連する問題