在下面的代码我希望能够隐式地从投elements至baseElements因为TBase可以隐式转换IBase.
public interface IBase { }
public interface IDerived : IBase { }
public class VarianceBug
{
public void Foo<TBase>() where TBase : IBase
{
IEnumerable<TBase> elements = null;
IEnumerable<IDerived> derivedElements = null;
IEnumerable<IBase> baseElements;
// works fine
baseElements = derivedElements;
// error CS0266: Cannot implicitly convert type
// 'System.Collections.Generic.IEnumerable<TBase>' to
// 'System.Collections.Generic.IEnumerable<IBase>'.
// An explicit conversion exists (are you missing a cast?)
baseElements = elements;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到了评论中提到的错误.
引用规范:
A型
T<A1, …
我正在使用C#StreamWritier类.问题:
我正在创建这样的文件:
private void button1_Click(object sender, EventArgs e)
{
SaveFileDialog save = new SaveFileDialog();
save.FileName = textBox1.Text;
save.Filter = "Text File | *.rtf";
if (save.ShowDialog() == DialogResult.OK)
{
StreamWriter writer = new StreamWriter(save.OpenFile());
writer.WriteLine(textBox2.Text);
}
writer.Dispose();
writer.Close();
}
Run Code Online (Sandbox Code Playgroud) 我支持在.NET 3.5上运行的旧版C#应用程序.我们FolderBrowserDialog在Windows Vista(32位或64位)上发现了一个问题.
基本上发生的事情是对话框会出现,但只会显示根桌面节点,甚至无法展开它以显示其他任何内容.显然,这是不可能的.
经过大量的反复试验后,我最终设法通过在设置的其余部分之前设置RootFolder属性来获得可用的东西:
FolderBrowserDialog browsePath = new FolderBrowserDialog();
browsePath.RootFolder = Environment.SpecialFolder.MyComputer;
browsePath.SelectedPath = this.textBoxTo.Text;
browsePath.Description = TextResources.OutputTargetCaption;
browsePath.ShowNewFolderButton = true;
if(browsePath.ShowDialog(this) == DialogResult.OK)
{
this.textBoxTo.Text = UpdateLocation(browsePath.SelectedPath);
}
Run Code Online (Sandbox Code Playgroud)
这几乎有效; 然而,我有一个奇怪的问题,然后SelectedPath(根据定义的内容textBoxTo)是当前用户的主目录中的路径,它不会自动浏览到该路径,而只是显示我的计算机节点扩展为一个水平.它对任何其他路径都完美无缺.
我确信你的第一个猜测是权限问题,就像我的直觉一样.它似乎不是,这个问题是正常运行的,并且作为管理员,对于标准帐户和管理员帐户都是如此.这是一个干净的安装,当然,没有奇怪的权限或任何东西.
当我们所有默认值都在当前用户的目录中时,这非常烦人!
注意:这只是在应用程序中发生的; 就我所见,它不能用小型测试应用程序重现.
关于可能导致这种情况的任何想法?
更新:Screenies:
这是我想要的行为(从一个小测试应用程序获得)
这是我得到的默认属性
这是我通过将根设置为我的电脑得到的
注意:最后一个图像具有相同的SelectedPath设置预期图像......
使用F#查询语法我试图获取某个字段不为空的所有记录,但我似乎无法找到一种方法.
首先,我试图:
query {
for h in dc.Table do
where (h.SectorId <> null)
select h
}
Run Code Online (Sandbox Code Playgroud)
但是,错误陈述The type 'Nullable<Guid>' does not have 'null' as a proper value. To create a null value for a Nullable type use 'System.Nullable()'.因此,更换null用Nullable()的建议,我用:
query {
for h in dc.Table do
where (h.SectorId <> Nullable())
select h
}
Run Code Online (Sandbox Code Playgroud)
当我在LINQPad中使用上述查询时,它不会检索任何值,即使我知道它们存在.问题似乎出现在SQL中:
-- Region Parameters
DECLARE @p0 UniqueIdentifier = null
-- EndRegion
SELECT [t0].[Id], [t0].[Name], [t0].[SectorId], [t0].[Blah], [t0].[Meh], [t0].[DisplayOrder]
FROM [Table] AS [t0] …Run Code Online (Sandbox Code Playgroud) 我想计算从0到9的数字是多少个字符串.尝试了一些代码,但它不起作用,每次都返回0.什么是错的,如何解决?如果你能告诉我如何使用srting.Count()方法.谢谢.
// Attempt 1
string str = textBox1.Text;
int b = 0;
int n = 0;
foreach (char a in str)
{
if ((b > 0) && (b < 9))
{
if ((char)b == a)
n++;
}
}
label1.Text = n;
// Attempt 2
string str = textBox1.Text;
int n = 0;
foreach (char a in str)
{
int[] k = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
foreach (int b in k)
{
if …Run Code Online (Sandbox Code Playgroud) 我在C#中有简单的winforms应用程序,它有两个控件:combobox1和button.当然,分别是ComboBox和Button.我想知道是否有任何物品combobox1......
我试过这个,但它只告诉我是否有一个选定的项目:
if (combobox1.Text != ""))
{
MessageBox.Show("Combo is not empty");
}
Run Code Online (Sandbox Code Playgroud) c# ×5
winforms ×2
.net ×1
combobox ×1
count ×1
covariance ×1
f# ×1
file ×1
generics ×1
sql ×1
sql-server ×1
streamwriter ×1