相关疑难解决方法(0)

LINQ可以在订购集合时使用二进制搜索吗?

当我试图搜索的集合被命令时,我能以某种方式"指示"LINQ使用二进制搜索.我正在使用ObservableCollection<T>,填充有序数据,我正在尝试使用Enumerable.First(<Predicate>).在我的谓词中,我按照我的集合排序的字段的值进行过滤.

c# linq collections binary-search

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

如何根据字体颜色选择背景颜色以获得适当的对比度

我不太了解颜色组成,所以我想出了这个算法,它将根据试验错误基础上的字体颜色选择背景颜色:

public class BackgroundFromForegroundColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (!(value is Color))
            return value;
        Color color = (Color)value;
        if (color.R + color.G + color.B > 550)
            return new SolidColorBrush(Colors.Gray);
        else if (color.R + color.G + color.B > 400)
            return new SolidColorBrush(Colors.LightGray);
        else
            return new SolidColorBrush(Colors.White);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

我做了一些谷歌搜索,但我没有找到任何非常正式的关于可以计算背景颜色的不同方式,以获得与字体颜色良好的对比效果.

所以我的问题是:是否有更"正式"的方法来选择良好的背景以获得良好的对比?或者,您将如何处理选择背景颜色,其唯一目的是使文本尽可能可读,无论其字体颜色如何?

快速更新

更多上下文:我只是想显示一些文本的预览(例如"快速的棕色狐狸跳过懒狗"),用户在那里选择字体颜色,重量,字体等.然而我对此感兴趣看看可以做些什么,无论是超级简单还是更复杂.

最后编辑

我决定采用所H.B.建议的:它似乎与我尝试的所有颜色都很好,不像我之前的算法,前景并不总是与背景正确对比.我很想知道是否有一个公式可以为给定前景提供"最佳"背景,但是对于我需要的黑/白工作就好了.这是我当前形式的代码: …

c# wpf fonts colors contrast

17
推荐指数
1
解决办法
9110
查看次数

简化if(x == 1 || x == 2)

可能重复:
C#if语句匹配多个值

我经常发现自己编写代码,其中变量可以是A或B,例如当我在转发器上调用OnItemDataBound时:

protected void repeater_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {}
}
Run Code Online (Sandbox Code Playgroud)

然后我常常想,必须有一种更简单的方法.我想写一些类似的东西:

if(x == (1 || 2))
Run Code Online (Sandbox Code Playgroud)

SQL有IN(..)运算符,C#中有类似的东西吗?

WHERE x IN(1,2)
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用switch语句,但这并不简单.如果可能的话,我希望它在If语句中完成.

c#

15
推荐指数
3
解决办法
4815
查看次数

现有的LINQ扩展方法类似于Parallel.For?

可能重复:
LINQ等效于IEnumerable <T>的foreach

用于ienumerable的linq扩展方法非常方便......但是如果你想要做的就是对枚举中的每个项应用一些计算而不返回任何内容,那就没有用了.所以我想知道我是否只是错过了正确的方法,或者它是否真的不存在,因为我宁愿使用内置版本,如果它可用......但我还没找到一个:-)

我可以发誓在某处有一个.ForEach方法,但我还没有找到它.与此同时,我确实编写了自己的版本,以防它对其他人有用:

using System.Collections;
using System.Collections.Generic;

public delegate void Function<T>(T item);
public delegate void Function(object item);

public static class EnumerableExtensions
{
    public static void For(this IEnumerable enumerable, Function func)
    {
        foreach (object item in enumerable)
        {
            func(item);
        }
    }

    public static void For<T>(this IEnumerable<T> enumerable, Function<T> func)
    {
        foreach (T item in enumerable)
        {
            func(item);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用法是:

myEnumerable.For<MyClass>(delegate(MyClass item) { item.Count++; });

c# linq iteration extension-methods

14
推荐指数
2
解决办法
6372
查看次数

检查对象是否满足通用参数约束

我有一个类似于下面的界面:

public interface IInterface<T>
    where T : IInterface<T>
{
}
Run Code Online (Sandbox Code Playgroud)

现在我需要使用反射创建一个表示此接口的类型,例如

typeof(IInterface<>).MakeGenericType(someType);
Run Code Online (Sandbox Code Playgroud)

但是,我实际上并不知道什么类型的'someType'将在运行时之前,并且该类型可能无法作为通用接口的类型参数有效,因此MakeGenericType失败.

问题是,如何检查'someType'是否对泛型约束有效?

c# generics reflection

13
推荐指数
2
解决办法
3595
查看次数

Generic方法可以同时处理Reference和Nullable Value类型吗?

我有一系列的扩展方法来帮助对IDataRecord对象进行空值检查,我目前正在实现这样:

public static int? GetNullableInt32(this IDataRecord dr, int ordinal)
{
    int? nullInt = null;
    return dr.IsDBNull(ordinal) ? nullInt : dr.GetInt32(ordinal);
}

public static int? GetNullableInt32(this IDataRecord dr, string fieldname)
{
    int ordinal = dr.GetOrdinal(fieldname);
    return dr.GetNullableInt32(ordinal);
}
Run Code Online (Sandbox Code Playgroud)

等等,对于我需要处理的每种类型.

我想重新实现这些作为通用方法,部分是为了减少冗余,部分是为了学习如何编写通用方法.

我写过:

public static Nullable<T> GetNullable<T>(this IDataRecord dr, int ordinal)
{
    Nullable<T> nullValue = null;
    return dr.IsDBNull(ordinal) ? nullValue : (Nullable<T>) dr.GetValue(ordinal);
}
Run Code Online (Sandbox Code Playgroud)

只要T是值类型,它就可以工作,但如果T是引用类型,它就不会.

如果T是值类型,则此方法需要返回Nullable类型,否则返回default(T).我该如何实现这种行为?

.net c# generics

12
推荐指数
1
解决办法
4017
查看次数

发布jQuery的短扩展函数好东西

与SO上的c#扩展主题类似,如果我们可以整合大量有用的jQuery函数扩展,那将是很好的.

请注意,我们的想法是使用简短的代码片段,而不是使用众所周知的插件或ui小部件

javascript jquery jquery-plugins

12
推荐指数
1
解决办法
1337
查看次数

如何在vb.net中实现值类型的C#'as'关键字?

我们的大多数开发都是在vb.net中完成的(不是我的选择),一个经常使用的代码模式使用'On Error GoTo'后跟'Resume Next',以便所有数据库字段都可以使用DirectCast()读取DBNull值只是被忽略.

目前的代码是

On Error GoTo error_code
oObject.Name = DirectCast(oReader.Item("Name"), String)
oObject.Value = DirectCast(oReader.Item("Value"), Integer)
error_code:
Resume Next
Run Code Online (Sandbox Code Playgroud)

C#代码替换这个启用删除On Error代码即可

oObject.Name = oReader["Name"] as string ?? string.Empty;
oObject.Value = oReader["Value"] as int? ?? -1;
Run Code Online (Sandbox Code Playgroud)

问题是这个C#代码的vb.net eqivelent使用TryCast(),它只能用于引用类型(可空类型是值类型),而C#as关键字可以用于引用和可空类型.

总而言之,有没有人有一个vb.net代码的例子,它在每个数据库字段的单行中与C#代码做同样的事情?

-编辑-

在我们的案例中,我已经确定了我认为最好的解决方案.Helper方法不适合(由于管理),我们不能使用扩展方法,因为我们只使用.NET 2.0(尽管使用VS 2008,因此我们获得了If())

oObject.Name = If(oReader.IsDBNull(oReader.GetOrdinal("Name")), String.Empty, oReader.GetString(oReader.GetOrdinal("Name")))
oObject.Value = If(oReader.IsDBNull(oReader.GetOrdinal("Value")), 0, oReader.GetInt32(oReader.GetOrdinal("Value")))
Run Code Online (Sandbox Code Playgroud)

.net c# vb.net

12
推荐指数
2
解决办法
3381
查看次数

在C#中保存数据结构

我正在通过写一个家庭图书馆经理来学习C#.

我有一个BookController,它将书籍存储在数据结构中并对它们执行操作.

C#是否有办法将字典中的数据保存到本地文件(可能是XML格式)以便稍后加载,或者我是否必须自己编写?

保存和加载C#可用数据的最佳方法是什么?只需指出一个好的方向.

c# serialization

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

根据外部因素验证对象(即数据存储唯一性)

描述

我的解决方案有这些项目:

  • DAL =修改后的实体框架
  • DTO =能够验证自己的数据传输对象
  • BL =业务层服务
  • WEB =演示Asp.net MVC应用程序

DAL,BL和WEB都参考了很棒的DTO.
该过程通常以这种方式执行:

  1. 向WEB发出Web请求
  2. WEB获得DTO发布
    • DTO通过自定义ActionFilter自动验证
    • 验证错误是自动收集的
  3. (验证是可以的)WEB调用BL提供DTO
  4. BL通过使用DTO调用DAL(可以通过它们或只是使用它们)

那么DTO验证问题......

我的DTO能够根据自己的状态(属性值)验证自己.但是现在我遇到了问题,但事实并非如此.我需要他们使用BL(以及因此DAL)进行验证.

我的现实生活中的例子:用户注册和WEB获得验证的用户DTO.有问题的部分是username验证.应根据数据存储检查其唯一性.
我该怎么做?

还有其他信息表明所有DTO都实现了IoC和TDD 的接口(即UserDTO实现IUser).两者都是DTO项目的一部分.

不可能尝试

  1. 我无法在DTO中引用BL,因为我将获得循环引用.
    Compilation error
  2. 我无法创建一个额外的DTO.Val项目,它将引用部分DTO类并在那里实现它们的验证(它们引用BL + DTO).
    Partial classes can't span assemblies.

可能的尝试

  1. 创建一个特殊的ActionFilter,可以根据外部条件验证对象.这个将在WEB项目中创建,因此可以看到将在此处使用的DTO和BL.
  2. 将DTO放在BL中并将DTO接口保持为其他项目引用的实际DTO,并重构所有代码以使用接口而不是具体类.
  3. 不处理外部依赖验证,并让外部依赖项抛出异常 - 可能此问题的最糟糕的解决方案

你会建议什么?

validation asp.net-mvc xval data-annotations

10
推荐指数
2
解决办法
5042
查看次数