2012-12-08 15 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中的限制條件。 WinRT不支持實現繼承,您將從一開始就遇到這樣一個限制。這就要求你申報你的班級密封

本機WinRT類型與.NET類型非常不同。可以存儲日期的真正運行時類型是Windows.Foundation.DateTime。一個字符串實際上是一個HSTRING句柄。一個List實際上是一個IVector。等等。不用說,如果您實際上必須使用這些本機類型,那麼您的程序就不會再類似於.NET程序。而你不這樣做,CLR的.NET 4.5版本內置了語言投影。自動將WinRT類型轉換爲它們的等效.NET類型的代碼。該翻譯有一些粗糙的邊緣,有些類型不容易被替換。但絕大多數地圖沒有麻煩。

System.DateTime就是這樣一個粗糙的邊緣。 Windows.Foundation.DateTime的語言投影是System.DateTimeOffset。所以,簡單地通過聲明你的方法是這樣解決問題:

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

唯一的另一點值得注意的是,這只是需要其他代碼可能會使用會員。公衆成員。

相關問題