请参阅System.Array类的定义
public abstract class Array : IList, ...
Run Code Online (Sandbox Code Playgroud)
从理论上讲,我应该能够写下这一点,并感到高兴
int[] list = new int[] {};
IList iList = (IList)list;
Run Code Online (Sandbox Code Playgroud)
我也应该可以从iList中调用任何方法
ilist.Add(1); //exception here
Run Code Online (Sandbox Code Playgroud)
我的问题不是为什么我得到一个例外,而是为什么Array实现了IList?
我们正在实现一些EF数据存储库,我们有一些查询包括 TOP 1
我已经阅读了许多建议使用.Take(1)
我正在审查的代码使用的帖子.First()
我知道这两个都会为对象赋值产生相同的结果,但它们是否实际上都解析为同一个查询?查询数据库时,它实际上是否同时TOP 1用于两个请求?或者他们会将查询完整地执行到可枚举中,然后只需获取集合中的第一个条目?
此外,如果我们使用.FirstOrDefault()那么为什么我们应该期待任何不同的行为?我知道,当使用一个IEnumerable,调用一个.First()在一个空的集合会抛出,但如果这是实际上只更改查询包括TOP 1话,我应该会完全没有功能上的差异之间.First()和.FirstOrDefault()....对不对?
或者,是否有比这些Enumerable扩展更好的方法来执行查询TOP 1?
当从一个双精度变为十进制时,假设我double 可以表示为decimal...
它是更合适的投双为十进制:
(显式数值转换表)(请注意,此项错误地违背了前者!)
double foo = bar;
decimal foobar = (decimal)foo;
Run Code Online (Sandbox Code Playgroud)
或者更适合调用decimal构造函数:
(Decimal Constructor)
double foo = bar;
decimal foobar = new decimal(foo);
Run Code Online (Sandbox Code Playgroud)
我倾向于使用decimal构造函数,但我想知道使用一个与另一个的原因.
从我可以告诉我唯一的区别是,下面的双重显式转换Decimal.MinValue返回零,而使用构造函数抛出一个OverflowException
编辑: @Joren在下面的评论中指出,演员OverflowException也会抛出一个小值...所以显然MSDN文档是不正确的.
相关问题:
- C#将双变量强制转换为十进制
- 安全地自动从双精度转换为十进制:以下是否安全?
我想在我的应用程序中开始使用NodaTime来管理时间,瞬间和一般时间本地化.
有时我会将时间戳保留在SQL Server 2008数据库中.我传统上使用UTC中的datetime2字段.这些时间戳将使用Noda创建.似乎这个日期转换为Noda's Instant可能是不可取的.
我应该用什么类型来坚持下去?
如果我在SQL中使用非整数,那么我的App层和DAL之间可能存在转换问题.但是,如果我坚持整数Noda瞬间,我将在相同的层之间进行逻辑耦合......并且我将无法在SQL中执行简单的日期聚合而不将其带入应用层或CLR.
Noda认为,在UTC中无法可靠地描述时刻,因为UTC中从未发生过某些时间.
在MS SQL Server 2008 R2中编写存储过程,我想避免使用DSQL ...
我希望sort方法(ASC或DESC)是有条件的.
现在,使用数字列,我只需使用case语句并取消值来模拟ASC或DESC ......即:
... ORDER BY CASE @OrderAscOrDesc WHEN 0 THEN [NumericColumn] ELSE -[NumericColumn] END ASC
Run Code Online (Sandbox Code Playgroud)
使用alpha列执行此操作的适当方法是什么?
编辑:我想到了一个聪明的方法,但它看起来非常低效......我可以将我的有序alpha列插入带有自动编号的临时表中,然后使用上述方法按自动编号排序.
EDIT2:
你们怎么看待这种方法?
ORDER BY CASE @OrderAscOrDesc WHEN 0 THEN [AlphaColumn] ELSE '' END ASC,
CASE @OrderAscOrDesc WHEN 0 THEN '' ELSE [AlphaColumn] END DESC
Run Code Online (Sandbox Code Playgroud)
我不知道是否强制对统一列进行排序比从排序字符串中导出数字更有效
假设我正在使用LINQ数组.Distinct()方法.结果是无序的.
好吧,如果你知道用于产生结果的逻辑,那么一切都是"有序的".
我的问题是关于结果集.结果数组是否会处于"第一个不同"顺序或"最后一个不同"顺序?
我可以永远不依赖任何订单吗?
这是旧的"删除重复字符串"问题,但我正在研究LINQ解决方案.
我的应用程序与需要身份验证的内部Web API进行通信.
当我发送请求时,我按预期获得401质询,发生握手,重新发送经过身份验证的请求,一切都继续正常.
但是,我知道 auth是必需的.为什么我要等待挑战?我可以强制请求在第一个请求中发送凭据吗?
我的请求生成是这样的:
private static HttpWebRequest BuildRequest(string url, string methodType)
{
var request = HttpWebRequest.CreateHttp(url);
request.PreAuthenticate = true;
request.AuthenticationLevel = AuthenticationLevel.MutualAuthRequested;
request.Credentials = CredentialCache.DefaultNetworkCredentials;
request.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials;
request.ContentType = CONTENT_TYPE;
request.Method = methodType;
request.UserAgent = BuildUserAgent();
return request;
}
Run Code Online (Sandbox Code Playgroud)
即使使用此代码,auth标头也不包含在初始请求中.
我知道如何将auth信息包含在基本....我想要做的是使用执行应用程序的用户的Windows Auth(所以我不能将密码存储在配置文件中).
更新我还尝试使用a HttpClient和它自己的.Credentials属性,结果相同:没有auth头添加到初始请求.
我可以获得auth标头的唯一方法是使用基本身份验证手动破解它(在这种情况下不会飞行)
如果我故意在VARCHAR列中存储尾随空格,我如何强制SQL Server将数据视为不匹配?
SELECT 'foo' WHERE 'bar' = 'bar '
Run Code Online (Sandbox Code Playgroud)
我试过了:
SELECT 'foo' WHERE LEN('bar') = LEN('bar ')
Run Code Online (Sandbox Code Playgroud)
我看到浮动的一种方法是在每个字符串的末尾添加一个特定的字符,然后将其剥离出来用于我的演示......但这看起来很傻.
有没有一种方法我忽略了?
我注意到它不适用于前导空格所以也许我运行一个函数,它在比较之前反转字符顺序....问题是这使得查询unSARGable ....
我有一个带有小数据模型的项目,它以只读方式使用EF模型.
我不想要模型中的完整列集,但如果它们不可为空并且没有默认值,则需要它们.
如何避免包含此类列?我可以在数据模型中将EF置于某种只读模式,这样我就可以从实体中删除列吗?
我之所以这样做是因为通过将数据模型中的列减少到我需要的数量,我减少了模型在查询中返回的列,并且如果模式发生变化,我可以降低破坏数据使用者的风险.
编辑:我的架构有表NOT NULL没有默认值的列.据我所知,我需要将这些列包含在我的edmx中.在我的情况下,我只有只读上下文,所以我不希望这些列完全包含在我的edmx中.
如果我可以阻止列在数据模型中,我可以防止因更改架构而产生的许多问题.到目前为止,我发现的唯一解决方案是通过指向没有列的"假"数据库来构建数据模型!
.net ×4
c# ×4
sql-server ×3
arrays ×2
linq ×2
sql ×2
casting ×1
collections ×1
conditional ×1
decimal ×1
distinct ×1
double ×1
ienumerable ×1
ilist ×1
liskov-substitution-principle ×1
list ×1
nodatime ×1
sql-order-by ×1
string ×1
varchar ×1