public class Icon
{
public int IconID { get; set; }
public string Title { get; set; }
public string Room { get; set; }
public string ImageCover { get; set; }
}
public class IconManager
{
public static List<Icon> GetIcons()
{
var Icons = new List<Icon>();
Icons.Add(new Icon { IconID = 1, Title = "Fan", Room = "Enter-Room", ImageCover = "Assets/1.png" });
Icons.Add(new Icon { IconID = 2, Title = "AirConditioner", Room = "Enter-Room", ImageCover = "Assets/2.png" });
Icons.Add(new Icon { IconID = 3, Title = "WifiRouter", Room = "Enter-Room", ImageCover = "Assets/3.png" });
Icons.Add(new Icon { IconID = 4, Title = "Camera", Room = "Enter-Room", ImageCover = "Assets/4.png" });
Icons.Add(new Icon { IconID = 5, Title = "OfficePhone", Room = "Enter-Room", ImageCover = "Assets/5.png" });
Icons.Add(new Icon { IconID = 6, Title = "TV", Room = "Enter-Room", ImageCover = "Assets/6.png" });
Icons.Add(new Icon { IconID = 7, Title = "Clean", Room = "Enter-Room", ImageCover = "Assets/7.png" });
return Icons;
}
}
当我点击每个项目时,我将导航到该框架,但如何使用开关盒进行操作? 这是我的click_event
private void Grid_Clicked(object sender, ItemClickEventArgs e)
{
var icon = (Icon)e.ClickedItem;
IconResult.Text = "You selected a " + icon.Title;
var container = ForegroundElement.ContainerFromItem(e.ClickedItem) as GridViewItem;
if (container != null)
{
//find the image
var root = (FrameworkElement)container.ContentTemplateRoot;
var image = (UIElement)root.FindName("ConnectedElement");
//prepare the animation
ConnectedAnimationService.GetForCurrentView().PrepareToAnimate("Image", image);
}
switch (icon)
{
case icon.Title = "Fan";
Frame.Navigate(typeof(FanDetail));
}
}
我收到了错误
案例icon.Title =“粉丝”;它说不能将String类型转换为'ClickableGrid.Icon'
答案 0 :(得分:0)
Switch / Case将检查交换机obj与每种情况的以下语句之间的相等性。 在此示例中,您的代码将检查Icon和“Fan”之间的相等性。顺便说一下'Icon.Title =“粉丝”'是一种矫揉造作,而不是一种布尔表达。 尝试像switch(Icon.Title)和case“Fan”这样的东西。
为了写不好,我是法国人和电话。
祝你好运,答案 1 :(得分:0)
您需要打开原始值,即string或int。例如,将代码更改为:
var title = icon.Title;
switch (title)
{
case "Fan":
Console.WriteLine("Fan");
break;
case "TV":
Console.WriteLine("TV);
break;
default:
Console.WriteLine("Default case");
break;
}
答案 2 :(得分:0)
您只能将switch用于基元类型(字符串,数字,枚举,字符)。如果您只想检查Title
,那么您应该使用以下
switch (icon.Title)
{
case "Fan":
Frame.Navigate(typeof(FanDetail));
break;
default:
break;
}
如果您还要检查对象的其他属性,则应使用if-else语句
if(icon.Title == "Fan")
{
Frame.Navigate(typeof(FanDetail));
}
else if(icon.IconId == 3)
{
//Do something
}
答案 3 :(得分:0)
File "myConn.py", line 16, in <module>
result = B_cur.execute(sql,(plot))
File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 210, in execute
query = query % args
TypeError: not all arguments converted during string formatting
这是你想要做的。然而,这有点糟糕的设计。代码将难以维护和调试。
我建议创建一个字典,其中图标标题为键,帧类型为值。然后你可以完全放弃使用开关。
我还建议研究策略模式。
答案 4 :(得分:0)
您不能以这种方式使用C#switch
语句。您应该使用if
语句替换它,或使用C#7中引入的新pattern matching feature:
switch (icon)
{
case Icon i when i.Title == "Fan":
{
Frame.Navigate( typeof(FanDetail) );
break;
}
default:
break;
}
但是,如果您拥有的唯一类型是Icon
,则可以更简单地打开Title
本身:
switch (icon.Title)
{
case "Fan":
{
Frame.Navigate( typeof(FanDetail) );
break;
}
default:
break;
}
答案 5 :(得分:0)
在交换机/机箱中,计算机将进行相等检查。只允许非常特定的类型,因为只有它们相等才有所了解。同样的检查往往是.NET的一个棘手问题:http://www.codeproject.com/Articles/18714/Comparing-Values-for-Equality-in-NET-Identity-and
C# version 7通过模式匹配彻底扩展了开关/案例的能力。现在案件的价值可能是一个复杂的表达。
但是如果你有一个Nr的情况。元素是动态的,通常你应该使用Dictionary或类似的集合而不是switch / case。实际上,您很可能会使用它们的键/值对从集合本身填充GUI(通常是ComboBox)。因此,将其映射回来很容易。