小编bob*_*bbo的帖子

Lazy <T>延迟加载错误:字段初始值设定项无法引用非静态字段,方法或属性

我试图第一次使用延迟加载来初始化我的类中的进度对象.但是,我收到以下错误:

字段初始值设定项不能引用非静态字段,方法或属性.

private Lazy<Progress> m_progress = new Lazy<Progress>(() =>
{
    long totalBytes = m_transferManager.TotalSize();
    return new Progress(totalBytes);
});
Run Code Online (Sandbox Code Playgroud)

在.NET 2.0中,我可以执行以下操作,但我更喜欢使用更新的方法:

private Progress m_progress;
private Progress Progress
{
    get
    {
        if (m_progress == null)
        {
            long totalBytes = m_transferManager.TotalSize();
            m_progress = new Progress(totalBytes);
        }
        return m_progress;
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

非常感谢.

.net c# generics lazy-loading

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

如何删除/删除数据绑定组合框?SelectedIndex = -1不起作用

我试图在我的Windows窗体应用程序中取消选择(删除)一些组合框.在我的应用程序中,我有一个Reset方法,它将每个组合的SelectedIndex设置为-1.我的所有组合框都是数据绑定的,即每个组合框都使用数据源填充.

我注意到有时我的Reset方法有效,即它取消选择当前选中的项目并清空组合.但是,在我尝试将其设置为-1之后,它会直接选择第一个项目(SelectedIndex = 0).从用户的角度来看,这看起来像一个错误,因为它并不总是"清除"表单.

根据MSDN:

"要取消选择当前选定的项目,请将SelectedIndex设置为-1.如果项目是数据绑定项目,则无法将ComboBox项目的SelectedIndex设置为-1."

有谁知道一项工作?

非常感谢

.net c# combobox winforms

10
推荐指数
3
解决办法
4万
查看次数

什么时候应该使用IEnumerable和GetEnumerator?

在我们的许多项目中,我看到了一些自定义集合或容器类,它们包含某种泛型集合,例如List(of T)类.

它们通常有一个GetXXX方法,它返回自定义集合类使用的任何类型的IEnumerable,因此可以使用foreach循环迭代内部集合.

例如

public IEnumerable<UploadState> GetStates
{
    get
    {
        return new List<UploadState>(m_states);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,这些类应该实现IEnumerable接口,并调用GetEnumeratorList本身.

是否有首选方式,还是由开发人员负责?

.net c#

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

是否在执行存储过程中的END之后的语句?

是否在执行存储过程中的END之后的语句?

我发现我的存储过程包括BEGIN/END块后的丢弃过程.但是,每次我在代码中的其他地方执行存储过程时,它似乎工作正常,并且pvd_sp_yyy不会被删除.我不知道为什么?我首先担心这个问题,所以无论如何我都会删除附加声明.

有没有人对此有任何想法?

谢谢

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER PROCEDURE [dbo].[pvd_xxx]
    @var
AS

BEGIN

    DECLARE @RETURN int

    SET @RETURN = 0

    IF EXISTS (
        SELECT * FROM table1
        WHERE name = @var
    )
    BEGIN
        SET @RETURN = 1
    END

    RETURN @RETURN

END


IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[pvd_sp_yyy]') AND type in (N'P', N'PC'))
    DROP PROCEDURE [pvd_sp_yyy]
Run Code Online (Sandbox Code Playgroud)

.net sql sql-server-2005 sql-server-2008

4
推荐指数
1
解决办法
265
查看次数

将标识列添加到现有表作为主键并更改顺序

我有一张表,里面有超过700万条记录.该表没有主键.我想添加一个新的标识列并将其设置为主键.我尝试使用SSMS添加列,然后将其设置为主键.我把这个新列称为Id.

这几乎可以工作,但我想将表的默认顺序更改为基于另一列,例如日期时间列按降序排列.这可能吗?也许我需要使用临时表和ROW_NUMBER()函数.

但是,我不是很擅长SQL.有人可以帮忙吗?

我还需要一个回滚脚本,以便我可以回到原始表.

sql sql-server

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

订阅活动

在.NET中订阅事件时,我需要创建一个新的委托实例,例如

toolbarControl1.OnUploadEventHandler += 
    new ToolbarControl.UploadEventHandler(toolbarControl1_OnUpload);
Run Code Online (Sandbox Code Playgroud)

或者做以下事情更好吗?

toolbarControl1.OnUploadEventHandler += toolbarControl1_OnUpload;
Run Code Online (Sandbox Code Playgroud)

提前致谢.

.net c# events delegates

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

关闭winform应用程序时,将对象设置为null通常是个好主意吗?

在C#2.0 winform应用程序中将托管对象设置为null通常是一个好主意,即在关闭它们时将表单和控件设置为null,或者我应该将其留给垃圾收集.

我的项目中的一个类叫做Job,它存储String和Lists类型等.是否有必要这样做:

if (Job != null)
{
    Job = null;
}
Run Code Online (Sandbox Code Playgroud)

或者这只是非托管资源所必需的,例如具有dispose方法的文件句柄.我绝对应该调用它,然后设置为null.

任何澄清都会很棒.谢谢.

c# .net-2.0 winforms

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

与GO语句,未提交的事务和更改过程混淆

我想深究这一点,因为这让我感到困惑.任何人都可以解释我何时应该在我的脚本中使用GO语句?

据我所知,GO语句不是T-SQL语言的一部分,而是用于将一批语句发送到SQL服务器进行处理.

当我在查询分析器中运行以下脚本时,它似乎运行正常.然后我关闭窗口,它会显示一个警告:

"有未提交的交易.您是否希望在关闭窗口之前提交这些交易?"

BEGIN TRANSACTION;
GO 

ALTER PROCEDURE [dbo].[pvd_sp_job_xxx]
    @jobNum varchar(255)

AS
BEGIN

    SET NOCOUNT ON;
    UPDATE tbl_ho_job SET delete='Y' WHERE job = @job;
END


COMMIT TRANSACTION;
GO
Run Code Online (Sandbox Code Playgroud)

但是,如果我在ALTER语句的末尾添加一个GO就可以了(如下所示).怎么会?

BEGIN TRANSACTION;
GO



ALTER PROCEDURE [dbo].[pvd_sp_xxx]
    @jobNum varchar(255)

AS
BEGIN

    SET NOCOUNT ON;
    UPDATE tbl_ho_job SET delete='Y' WHERE job = @job;
END
GO


COMMIT TRANSACTION;
GO
Run Code Online (Sandbox Code Playgroud)

我想删除所有的GO,但是它抱怨alter procedure语句必须是查询批处理中的第一个语句?这只是我必须坚持的要求吗?

这看起来很奇怪,因为如果我BEGIN TRANSACTION和GO ....该语句被发送到服务器进行处理并开始一个事务.

接下来是ALTER过程,一个COMMIT TRANSACTION和一个GO(因此将这些语句发送到服务器进行处理,提交完成之前开始的事务),当我关闭窗口时它是怎么回事?当然,我已经满意alter procedure语句是批处理中的第一个.怎么抱怨未提交的交易.

任何帮助将非常感谢!

sql sql-server-2005 sql-server-2008

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

ASP.net验证器正则表达式和带重音的名称/字符

我有一个asp.net控件,它使用正则表达式来验证用户输入的名字和姓氏.它适用于多达40个字符......我认为通过表达式的外观,它也允许'像O'Donald这样的名字,也可能是夸张的名字.

ValidationExpression="^[a-zA-Z''-'\s]{1,40}$"
Run Code Online (Sandbox Code Playgroud)

我的问题是带有重音的名称/字符,例如西班牙语和法语名称可能包含例如ñ是不允许的.有谁知道如何修改我的表达式以考虑到这一点?

.net regex asp.net

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

在表值函数中使用CTE的问题

我试图避免在我的项目中使用标量值函数,所以我决定尝试使用CTE将其中一个转换为表值函数.

我知道标量值函数的性能很差,因为它们必须为每一行执行,而SQL服务器无法以任何方式对其进行优化(即它充当黑盒子).

这是我第一次尝试将其转换为表值函数...

CREATE FUNCTION [dbo].[fn_get_job_average] (@jobnumber VARCHAR(50))
RETURNS TABLE AS RETURN
(   

  WITH JobAverage AS
  (
    SELECT job.Jobnumber, CAST(AVG(CAST(jobMark.Mark AS DECIMAL(18,1))) AS DECIMAL(18,1)) AS Average
    FROM  job 
      INNER JOIN jobMark 
        ON job.Guid = jobMark.Guid
    WHERE job.Jobnumber = @jobnumber
    GROUP BY job.Jobnumber
  )
  SELECT Jobnumber,
    CASE
      WHEN EXISTS(SELECT * FROM JobAverage) THEN Average
      ELSE 0.0 -- This never executes???, i.e. for job records that don't have a mark nothing is returned
    END AS Average
  FROM JobAverage
)
Run Code Online (Sandbox Code Playgroud)

我想输出一个包含工号和平均分数的表格.

对于有标记的工作,似乎没问题.也就是说,平均值与jobnumer一起返回.

对于没有商标的工作,似乎出错了.语句的ELSE部分不执行.也就是说,作为平均工作,我不会返回0.0.没有记录返回.我错过了什么吗? …

sql t-sql sql-server-2005 sql-server-2008

0
推荐指数
1
解决办法
3986
查看次数