C# 运行不同的基于代码的类型
我想用我的Piece类的子类型对象为我的WPF应用程序调用一个方法。我的问题是子类型对象的属性比文本对象的属性多 你知道比我在FillForm示例中更好地处理这个问题的方法吗 示例方法:C# 运行不同的基于代码的类型,c#,C#,我想用我的Piece类的子类型对象为我的WPF应用程序调用一个方法。我的问题是子类型对象的属性比文本对象的属性多 你知道比我在FillForm示例中更好地处理这个问题的方法吗 示例方法: public void FillForm(Piece currentPiece) { pieceIdTextBox.Text = currentPiece.id.ToString(); pieceNameTextBox.Text = currentPiec
public void FillForm(Piece currentPiece)
{
pieceIdTextBox.Text = currentPiece.id.ToString();
pieceNameTextBox.Text = currentPiece.title;
pieceDescriptionTextBox.Text = currentPiece.description;
if (!currentPiece.GetType().ToString().Equals("Namespace.Text"))
{
pieceFileSelectURLTextBlock.Text = (currentPiece as Namespace.Image).filePath;
SetPreviews((currentPiece as Namespace.Image).filePath);
}
}
谢谢 为什么不将方法更改为以下更安全的类型
public void FillForm(Piece currentPiece)
{
pieceIdTextBox.Text = currentPiece.id.ToString();
pieceNameTextBox.Text = currentPiece.title;
pieceDescriptionTextBox.Text = currentPiece.description;
if (currentPiece as Namespace.Image imagePiece)
{
pieceFileSelectURLTextBlock.Text = imagePiece.filePath;
SetPreviews(imagePiece.filePath);
}
}
进行安全广播:
public void FillForm(Piece currentPiece)
{
pieceIdTextBox.Text = currentPiece.id.ToString();
pieceNameTextBox.Text = currentPiece.title;
pieceDescriptionTextBox.Text = currentPiece.description;
var imagePiece = currentPiece as Image;
if(imagePiece != null)
pieceFileSelectURLTextBlock.Text = imagePiece .filePath;
SetPreviews(imagePiece .filePath);
}
}
不知道您实际使用它的目的是什么,但通常如果某个继承类型的行为应该不同,您会将该代码放在该类抽象或虚拟方法中。你想干什么?你的最终目标是什么?你的目标是什么?我的问题是,子类型对象比文本对象获得更多属性。你知道一种比我在FillForm示例中更好的方法吗?这只是一个暗箭伤人的问题,但您是否在问如何强制转换或如何处理多个派生类型?因为currentPiece.GetType.ToString.EqualNamespace.Text可以很容易地替换为ifcurrentPiece is Text。我想为虚拟展览构建一个后端。数据模型将与Unity项目共享。所以我不想给它增加太多的依赖性。我仍然不明白为什么你要检查文本然后转换成图像。
public void FillForm(Piece currentPiece)
{
pieceIdTextBox.Text = currentPiece.id.ToString();
pieceNameTextBox.Text = currentPiece.title;
pieceDescriptionTextBox.Text = currentPiece.description;
var imagePiece = currentPiece as Image;
if(imagePiece != null)
pieceFileSelectURLTextBlock.Text = imagePiece .filePath;
SetPreviews(imagePiece .filePath);
}
}