小编Ale*_*r R的帖子

这是C#4中的协方差错误吗?

在下面的代码我希望能够隐式地从投elementsbaseElements因为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# generics covariance

37
推荐指数
2
解决办法
1659
查看次数

如何制作"只读"文件?

我正在使用C#StreamWritier类.问题:

  1. 如何将文件设置为只读,以便没有人可以删除或写入文件?
  2. 如何制作隐藏文件?

我正在创建这样的文件:

    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)

c# file-permissions file streamwriter

9
推荐指数
3
解决办法
1万
查看次数

奇怪的FolderBrowserDialog行为

我支持在.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设置预期图像......

.net c# folderbrowserdialog windows-vista winforms

8
推荐指数
1
解决办法
2860
查看次数

无法在sql数据库中检查空值

使用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()'.因此,更换nullNullable()的建议,我用:

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)

sql sql-server f#

3
推荐指数
1
解决办法
764
查看次数

计算字符串中的数字(从0到9)

我想计算从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# count

2
推荐指数
1
解决办法
3294
查看次数

如何找出组合框内是否有一些物品?

我在C#中有简单的winforms应用程序,它有两个控件:combobox1button.当然,分别是ComboBoxButton.我想知道是否有任何物品combobox1......

我试过这个,但它只告诉我是否有一个选定的项目:

if (combobox1.Text != ""))
{
    MessageBox.Show("Combo is not empty");
}
Run Code Online (Sandbox Code Playgroud)

c# combobox winforms

2
推荐指数
1
解决办法
1万
查看次数