在C#中,我不能隐式转换long成int.
long l = 5;
int i = l; // CS0266: Cannot implicitly convert type 'long' to 'int'. An explicit conversion exists (are you missing a cast?)
Run Code Online (Sandbox Code Playgroud)
这会产生所述错误.这是正确的; 如果我这样做,由于错误的截断,我有可能破坏我的数据.如果我决定我知道自己在做什么,那么我总是可以做一个明确的演员,告诉编译器可以截断,我知道最好.
int i = (int)l; // OK
Run Code Online (Sandbox Code Playgroud)
但是,使用foreach循环时,相同的机制似乎不适用.
IList<long> myList = new List<long>();
foreach (int i in myList)
{
}
Run Code Online (Sandbox Code Playgroud)
编译器甚至不会在这里生成警告,即使它基本上是相同的事情:未经检查的截断a long到a int,这可能会很好地破坏我的数据.
所以我的问题很简单:为什么这foreach不会产生与变量赋值相同的错误?
我有一个在JBoss服务器上运行的简单Web服务.现在我需要从C++,Microsoft VC++ 2010访问它,确切地说.一般作为新的Web服务,我GOOGLE了我的问题,却发现大多数人建议"添加Web引用",出现自VS2008到消失的东西.所以我想知道是否有人可以给我一些关于从C++调用Web服务的最简单方法的指示.
在此先感谢您的时间.
请考虑以下界面:
public interface Generator {
String generate() throws IOException;
}
Run Code Online (Sandbox Code Playgroud)
以及以下实施:
public class EmptyStringGenerator implements Generator {
@Override
public String generate() {
return "";
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我省略throws IOException了Generator界面中指定的部分签名.然而,没有编译器错误,没有编译器警告,甚至没有@Override注释抱怨.
我知道这是按预期工作的.但是,我想知道这背后的意图.如果我的方法实际上没有抛出IOException,那么就可以不抛出它,我不必从签名中删除它.但是,如果我从我的方法签名中删除它EmptyStringGenerator,我强制此类的所有当前和未来的子类放弃抛出实际在接口中指定的异常的可能性.
对我来说,这听起来像是一个并没有给你带来任何好处的功能(除了保存几次击键,这根本不是一个好处),但在实际使用时有可能成为一个可怕的错误.
所以我的问题,有效的是:throws在派生类中省略异常有什么意义?这种可能性解决了什么问题?为什么允许这样做?
UPDATE
对于那些问"但那里有什么危害?"的人来说,这是我的一个评论的例子.顺便说一下,这并不是牵强附会,因为这正是我现在正在处理的事情:
程序员A指定接口I.程序员B编写实现类X,但忘记添加抛出.他也没有注意到,因为这里甚至没有警告.程序员C编写实现类Y,继承自X类,他甚至还特意想把投掷放在那里,因为他会扔掉.但即使界面规定了这一点,由于B的疏忽,他现在不再允许这样做了.实际上他不再允许在这里使用该例外.这是一个非常大的伤害.特别是如果X级不在你的控制之下.
以下查询工作正常。我正在使用外部选择中的值对内部选择进行过滤。
SELECT
bk.ID,
(SELECT COUNT(*) FROM guests WHERE BookingID = bk.ID) as count
FROM
bookings bk;
Run Code Online (Sandbox Code Playgroud)
但是,以下选择将不起作用:
SELECT
bk.ID,
(SELECT SUM(count) FROM (SELECT COUNT(*) AS count FROM guests WHERE BookingID = bk.ID GROUP BY RoomID) sub) as sumcount
FROM
bookings bk;
Run Code Online (Sandbox Code Playgroud)
错误消息是: Error Code: 1054. Unknown column 'bk.ID' in 'where clause'
为什么bk在子选择中知道我的别名,但在子选择的子选择中却不知道?
作为记录,我正在使用MySQL 5.6。
我在sql表中有一个转换为字节数组的图像.当我从包含该表的dataGridView中单击记录时,如何在图片框中显示它?我需要实际的代码.谢谢.这是代码我有转换:
private void button2_Click(object sender, EventArgs e)
{
SqlConnection cn = new SqlConnection(@" Data Source=HOME-D2CADC8D4F\SQL;Initial Catalog=motociclete;Integrated Security=True");
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] pic_arr = new byte[ms.Length];
ms.Position = 0;
ms.Read(pic_arr, 0, pic_arr.Length);
SqlCommand cmd = new SqlCommand("insert into motociclete(firma,model,poza,pret,anf,greutate,caprez,putere,garantie,stoc) values (@firma,@model,@poza,@pret,@anf,@greutate,@caprez,@putere,@garantie,@stoc)",cn);
cmd.Parameters.AddWithValue("@firma", textBox3.Text);
cmd.Parameters.AddWithValue("@model", textBox10.Text);
cmd.Parameters.AddWithValue("@poza", pic_arr);
cmd.Parameters.AddWithValue("@pret", textBox7.Text);
cmd.Parameters.AddWithValue("@anf", textBox4.Text);
cmd.Parameters.AddWithValue("@greutate", textBox9.Text);
cmd.Parameters.AddWithValue("@caprez", textBox5.Text);
cmd.Parameters.AddWithValue("@putere", textBox8.Text);
cmd.Parameters.AddWithValue("@garantie", textBox6.Text);
cmd.Parameters.AddWithValue("@stoc", textBox2.Text);
cn.Open();
try
{
int rez = cmd.ExecuteNonQuery();
if (rez > 0)
{
MessageBox.Show("Adaugare reusita ");
} …Run Code Online (Sandbox Code Playgroud)