小编Mag*_*pie的帖子

泛型和铸造

为什么以下编译?

public IList<T> Deserialize<T>(string xml)
{              
    if (typeof(T) == typeof(bool))
        return (IList<T>)DeserializeBools(xml);

    return null;
}

private static IList<bool> DeserializeBool(string xml) { ... do stuff ... }
Run Code Online (Sandbox Code Playgroud)

但事实并非如此

public MyClass<T> GetFromDb<T>(string id)
{
    if (typeof(T) == typeof(bool))
        return (MyClass<T>)GetBoolValue(id);  <-- compiler error here

    return null;
}

private static MyClass<bool> GetBoolValue(string id) { ... do stuff ... }
Run Code Online (Sandbox Code Playgroud)

c# generics

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

交叉应用性能差异

我有一个SQL查询,大约需要30秒才能返回1条记录.当使用此记录的BrandId运行时,CROSS APPLY中使用的函数是即时的.

SELECT 
   b.BrandId,
   b.Name,
   ah.Type,
   c.ContactEmails,
   c.ContactNumbers,
   c.ContactLinks
FROM 
   @IdsToFilterBy ids
JOIN dbo.AccountHandler ah ON ah.AccountHandlerId = ids.Id
JOIN dbo.Brand b ON ah.RepresentedByBrandId = b.BrandId
CROSS APPLY dbo.[fn_GetBrandContactDetails](b.BrandId) AS c
Run Code Online (Sandbox Code Playgroud)

但是,如果我只是更改表格,我会从CROSS APPLY获得BrandId.

SELECT 
   b.BrandId,
   b.Name,
   ah.Type,
   c.ContactEmails,
   c.ContactNumbers,
   c.ContactLinks
FROM 
   @IdsToFilterBy ids
JOIN dbo.AccountHandler ah ON ah.AccountHandlerId = ids.Id
JOIN dbo.Brand b ON ah.RepresentedByBrandId = b.BrandId
CROSS APPLY dbo.[fn_GetBrandContactDetails](ah.RepresentedByBrandId) AS c <-- change here
Run Code Online (Sandbox Code Playgroud)

查询现在只需2秒即可运行.当我加入时,dbo.Brand b ON cah.RepresentedByBrandId = b.BrandId我希望它们是一样的.

有人可以解释为什么巨大的性能差异?

UPDATE

不同之处在于,当我使用b.BrandId和整个AccountHandler表时,当我使用ah.RepresentedByBrandId时,CROSS APPLY在整个Brand表上运行.AccountHandler表相当小.

但是我期待CROSS APPLY仅在JOIN的结果上运行,这是一条记录.这是可能的还是我错过了解CROSS APPLY?

sql sql-server

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

Linq包含混乱

我注意到linq和Contains方法有些奇怪.似乎对哪个Contains方法调用感到困惑.

if (myString.Contains(strVar, StringComparison.OrdinalIgnoreCase))
{
  // Code here                  
}
Run Code Online (Sandbox Code Playgroud)

上面的代码无法编译,并出现以下错误:

无法从用法中推断出方法'System.Linq.Enumerable.Contains(System.Collections.Generic.IEnumerable,TSource,System.Collections.Generic.IEqualityComparer)'的类型参数.尝试显式指定类型参数.

如果我删除使用linq语句,它很满意包含(但刹车所有的linq代码).

告诉编译器我想使用String.Contains方法而不是Linqs的正确语法是什么?

干杯

c# linq

10
推荐指数
1
解决办法
3739
查看次数

如何从SQL二进制字段中获取单个字节

我在SQL Server中有一个二进制字段,我想在SQL函数中读取一个字节.在代码中我会使用一个字节数组.SQL中是否有等价物?

谷歌找不到任何东西.

sql sql-server

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

完善SQL二进制到IP地址字符串转换

我们使用二进制(16)字段来存储IP地址.我们这样做,因为它可以容纳IPv4和IPv6地址,并且很容易与.Net IPAddress类一起使用.

但是,我创建了以下SQL函数来将二进制地址转换为IP地址字符串以进行报告.

CREATE FUNCTION fn_ConvertBinaryIPAddressToString
(
    @binaryIP binary(16)
)
RETURNS nvarchar(39)
AS
BEGIN
    DECLARE @ipAsString nvarchar(39)

    -- Is IPv4
    IF (substring(@binaryIP, 5, 1) = 0x00)  <-- Is there a better way?
    BEGIN

        SELECT @ipAsString = CAST(CAST(substring(@binaryIP, 1, 1) AS int) AS nvarchar(3)) + '.' +
        CAST(CAST(substring(@binaryIP, 2, 1) AS int) AS nvarchar(3)) + '.' +
        CAST(CAST(substring(@binaryIP, 3, 1) AS int) AS nvarchar(3)) + '.' +
        CAST(CAST(substring(@binaryIP, 4, 1) AS int) AS nvarchar(3))

    END
    ELSE
    BEGIN
    -- Is IPv6
        -- …
Run Code Online (Sandbox Code Playgroud)

sql sql-server

10
推荐指数
1
解决办法
3222
查看次数

强制linq执行内连接

我试图迫使Linq在两个表之间进行内连接.我举个例子.

CREATE TABLE [dbo].[People] (
   [PersonId] [int] NOT NULL,
   [Name] [nvarchar](MAX) NOT NULL,
   [UpdatedDate] [smalldatetime] NOT NULL
   ... Other fields ...
)

CREATE TABLE [dbo].[CompanyPositions] (
   [CompanyPositionId] [int] NOT NULL,
   [CompanyId] [int] NOT NULL,
   [PersonId] [int] NOT NULL,
   ... Other fields ...
)
Run Code Online (Sandbox Code Playgroud)

现在我正在使用不寻常的数据库,因为有一个我无法控制的原因,人们在People表中丢失但在CompanyPositions中有记录.我想通过加入表来过滤掉缺少人员的CompanyPositions.

return (from pos in CompanyPositions
        join p in People on pos.PersonId equals p.PersonId
        select pos).ToList();
Run Code Online (Sandbox Code Playgroud)

Linq认为此连接是冗余的,并将其从它生成的SQL中删除.

SELECT 
[Extent1].[CompanyPositionId] AS [CompanyPositionId], 
[Extent1].[CompanyId] AS [CompanyId], 
.... 
FROM  [dbo].[CompanyPositions] AS [Extent1]
Run Code Online (Sandbox Code Playgroud)

然而,在我的情况下,这并不是多余的.我可以像这样解决它

// The min date check will always …
Run Code Online (Sandbox Code Playgroud)

c# sql linq linq-to-sql

10
推荐指数
1
解决办法
761
查看次数

应用程序进入前景后,viewDidAppear不会再次触发

我已经在我的iPhone应用程序代码中跟踪了一个问题,因为viewDidAppear方法并不总是触发.当您启动应用程序时,事件将按预期触发.但是,如果我使用能够进行多任务处理并重新打开的手机关闭应用程序.我的viewDidAppear事件不再触发.

我的视图是从Nibs加载的,我使用viewDidUnload来清理(释放和零所有出口).我的视图嵌套在侧面和标签栏然后导航控制器.当nib重新加载时,我看起来事件没有正确连线.我对错误/遗失的错误以及如何解决这个问题有所了解吗?

提前致谢.

更新我并不是说应用程序第一次进入前台时不会触发事件.我的意思是这个事件再也不会发生了.即使在标签之间切换或通过导航视图移动也是如此.

例:

- (void)viewDidAppear:(BOOL)animated {
   [super viewDidAppear:animated];
   NSLog(@"viewDidAppear called");
}
Run Code Online (Sandbox Code Playgroud)

此代码放在两个视图中,每个视图位于不同的选项卡上.每次我在选项卡之间交换"viewDidAppear called"都会写入日志.当我关闭并重新打开应用程序并在标签之间切换时,不再发生这种情况.其他按钮事件正常启动.

iphone events cocoa-touch ipad ios

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

运行 git submodule add 命令时获取“请确保 .gitmodules 文件在工作树中”

我是 git 新手,目前正在考虑从 mercurial 移植一些大型项目。我们有一个根项目,它只包含对所有外部项目(git 中的子模块)的引用。我正在尝试在 git 中重新创建它。

我已经将一个项目 (foo) 导入到 gitib 中。我创建了一个新的空项目(root)并将其克隆到本地。我想使用添加 Foo 作为子模块

git submodule add https://github.com/.../foo.git
Run Code Online (Sandbox Code Playgroud)

来自 /c/Work/GitHub/root (master)

但我不断收到“请确保 .gitmodules 文件在工作树中”。

查看文档,此命令的第一次运行应创建 .gitmodules 文件,但即使我手动创建它也会收到此错误。在谷歌上寻找这个错误只会返回带有错误的源文件,但没有解释为什么我会得到它。我认为这只是我对 git 的了解不足。

我做错了什么?

编辑:我也试过。

mkdir test
cd test
git init
git submodule add https://github.com/.../foo.git
Run Code Online (Sandbox Code Playgroud)

我犯了同样的错误。

git git-submodules

9
推荐指数
2
解决办法
6662
查看次数

可能的JQuery类选择器错误

我有一个返回HTML片段的ajax调用.我试图在渲染之前选择该片段中的div.

HTML的一个例子:

<div class="event-detail repBy-container">
    <div class="copy">.....</div>
    <div class="links">
       ....
    </div>
    <div class="contacts">
      <div class="name-brand">....</div><div class="details">...., <a href="mailto:...@....">...</a></div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

现在的问题是:

function ajaxReturn(data) {
   alert($(data).find('.event-detail').length); <-- Returns 0
   alert($(data).find('.copy').length); <-- Returns 1
}
Run Code Online (Sandbox Code Playgroud)

这是一个错误还是我做错了什么?

javascript jquery jquery-selectors

5
推荐指数
2
解决办法
145
查看次数

如何强制Visual Studio使用x64 DNX SDK体系结构

我正在使用1.0.0-beta7 x64,但视觉工作室坚持认为我使用的是x86.当我删除所有我的运行时,除了我定位的那个,我得到这个:

在此输入图像描述

我在项目的任何地方都找不到对x86的引用.

在此输入图像描述

当我将鼠标悬停在解决方案DNX SDK版本上时,它会显示x86版本,但我不知道它是从哪里获得的.目前这不会导致任何问题,我只是想了解发生了什么.

c# asp.net dnx asp.net-core

5
推荐指数
1
解决办法
1358
查看次数