C# Blazor如何推断@typeparam指令的数据类型?
下面的代码是使用.Net 5.0.203编写的 我有这个组件 霉素C# Blazor如何推断@typeparam指令的数据类型?,c#,blazor-webassembly,C#,Blazor Webassembly,下面的代码是使用.Net 5.0.203编写的 我有这个组件 霉素 @typeparam TItem <p>MyComponent: @typeName</p> @code { [Parameter] public IEnumerable<TItem> Data { get; set; } string typeName; protected override void OnInitialized() {
@typeparam TItem
<p>MyComponent: @typeName</p>
@code {
[Parameter]
public IEnumerable<TItem> Data { get; set; }
string typeName;
protected override void OnInitialized()
{
typeName = typeof(TItem).Name;
}
}
@typeparam-TItem
MyComponent:@typeName
@代码{
[参数]
公共IEnumerable数据{get;set;}
字符串类型名;
受保护的覆盖无效OnInitialized()
{
typeName=typeof(TItem).Name;
}
}
这是调用组件的页面
剃刀索引
@page "/"
<MyComponent Data="@items"></MyComponent>
<p>Page: @itemsType</p>
@code
{
string[] items = new string[2];
string itemsType;
protected override void OnInitialized()
{
itemsType = items.GetType().Name;
}
}
@page/“
页面:@itemsType
@代码
{
字符串[]项=新字符串[2];
字符串项类型;
受保护的覆盖无效OnInitialized()
{
itemsType=items.GetType().Name;
}
}
我希望MyComponent中的TItem类型是String[],但它是String
Blazor如何推断TItem的类型?当您使用
typeparam-TItem
的通用约束时,当您创建组件时,您必须指定该类型
当您在此处调用组件时:
您将@items
对象作为参数传递
如果您没有明确告诉组件它应该使用什么类型,那么默认情况下,它将使用传递给它的任何类型
你给了它一个string[]
所以它说“他给了我一个string[]
所以我假设TItem
是string
类型的。”。之所以这样做,是因为string[]
可以隐式转换为IEnumerable
,因为TItem
可以是任何对象,除非您这样做,否则它只能是某些类型
另一件值得注意的事情是TItem
是IEnumerable
参数中包含的对象类型。如果要检查传递的IEnumerable
类型,可以执行以下操作:
string[]s=新字符串[]{“fox”};
支票;
静态空隙检查(IEnumerable maybeArray)
{
Console.WriteLine(typeof(T));//System.String
Console.WriteLine(maybeArray是T[]);//true
Console.WriteLine(maybeArray是列表);//false
}
如果您想将代码> TTEM < /代码>作为<代码> String []/Cord>,请考虑接受<代码> TTEM < /代码>作为参数,而不是<代码> iNetraby< /C> > /< 例如:
[参数]
公共滴度数据{get;set;}
如果需要可枚举,请确保在TItem
上包含一个约束
有关如何在blazor中包含泛型约束的更多信息(这很奇怪),请查看)