我使用的是C#类和它的作品在我的Windows Store应用(C#)完美的罚款。 但是,当我尝试在Windows运行时Compenent使用它,我得到以下错误:
Calculator.Calculate(System.DateTime的)”具有参数 '的System.DateTime '' 类型的' 日期时间。 “System.DateTime的”是不是有效的Windows运行时的参数类型。
在A级采样对象:
public DateTime Calculate(DateTime dateTime)
{
int dayNumberOfDateTime = ExtractDayNumber(dateTime);
int sunRiseInMinutes = CalculateSunRiseInternal(tanSunPosition, differenceSunAndLocalTime);
return CreateDateTime(dateTime, sunRiseInMinutes);
}
我怎样才能解决这个问题? 什么问题呢?
当您创建一个Windows运行时组件,然后你的组件可以通过未管理,如JavaScript或C ++语言中使用。 显然,这些语言不知道如何生成适当的System.DateTime的,它是一个特定的.NET类型。
因此,这样的部件必须只使用天然的WinRT类型和以其他方式观察存在于WinRT中的限制。 你会从一开始就碰上一个这样的限制是WinRT中不支持实现继承。 这就需要你申报你的类密封 。
原生的WinRT类型很不一样的.NET类型。 可以存储日期的真正运行时类型Windows.Foundation.DateTime。 字符串实际上是一个HSTRING手柄。 一个列表实际上是一个IVector。 等等。
不用说,如果你想真正使用这些原生类型那么你的程序将不会像一个.NET程序了。 而你不这样做,CLR的.NET 4.5版本有内置的。代码自动转换WinRT的类型为等效的.NET类型语言投影 。 这翻译有一些粗糙的边缘,一些类型的不易被取代。 但他们中的绝大多数的地图,而烦恼。
System.DateTime的就是这样一个粗糙的边缘。 Windows.Foundation.DateTime的语言投影System.DateTimeOffset。 所以,简单地通过声明你的方法是这样解决问题:
public DateTimeOffset Calculate(DateTimeOffset dateTime) {
// etc..
}
唯一的另一点值得注意的是,这只是需要其他代码可能会使用会员。 公共成员。
我也面临着同样的问题,在我的Windows运行时组件,如下。
Severity Code Description Project File Line Suppression State
Error Method '.put_TxPower(System.SByte)' has parameter 'value' of type 'System.SByte'.
System.SByte' is not a valid Windows Runtime parameter type.
正如卢卡斯玛顿在评论中提到,从公众到内部工作对我来说改变访问修饰符。
之前:
public sbyte TxPower { get; set; }
后:
internal sbyte TxPower { get; set; }