小编Jon*_*Jon的帖子

C#泛型和类型检查

我有一个使用a IList<T>作为参数的方法.我需要检查该T对象的类型是什么,并根据它做一些事情.我试图使用该T值,但编译器不允许它.我的解决方案如下:

private static string BuildClause<T>(IList<T> clause)
{
    if (clause.Count > 0)
    {
        if (clause[0] is int || clause[0] is decimal)
        {
           //do something
        }
        else if (clause[0] is String)
        {
           //do something else
        }
        else if (...) //etc for all the types
        else
        {
           throw new ApplicationException("Invalid type");
        }
    } 
}
Run Code Online (Sandbox Code Playgroud)

必须有更好的方法来做到这一点.有什么方法可以检查T传入的类型然后使用switch语句?

c# generics types

72
推荐指数
5
解决办法
9万
查看次数

有没有办法限制对ASMX Web服务的访问,即asmx页面及其WSDL?

我有一个C#.net webservice,我需要限制访问.我已经要求我的消费者使用用户名和密码来呼叫该服务.但是,有没有办法限制对实际的asmx页面和WSDL的访问?我需要通过用户名/密码和IP地址限制对webservice的访问.如果用户没有正确的凭据,我不希望他们知道Web服务中存在哪些web方法.

这可以通过IIS完成吗?我知道我可以通过IIS限制IP地址,但我还可以使用用户名/密码吗?

有没有其他方法可以在IIS之外执行此操作,也许使用C#.net?

security iis web-services asmx

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

具有顶行和左列冻结的可滚动HTML表

有没有人能够在HTML中实现一个可滚动的表,其中TOP行和LEFT列被冻结,但表的其余部分是否可滚动?一个很好的例子是: Google Squared

我试图对谷歌平方表的代码进行逆向工程,但到目前为止我还没有成功.

注意:我需要能够同时冻结TOP ROW和LEFT COLUMN.

html javascript scrollable-table

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

存储和更新外部API密码的最佳实践

我有一个ASP.Net C#应用程序,需要每5分钟使用WebServices连接到一个外部API.

外部Web服务的要求如下:

  • 用户名和密码是必需的
  • 我必须在每个webservice请求中传输用户名和密码
  • 密码每90天到期,必须在到期日之前更改
  • 密码无法手动更改(由人工),我的应用程序必须连接到单独的密码更改Web服务才能更改密码.
  • 我的应用程序必须根据一组规则生成每个新密码.
  • 密码永远不会被重用.
  • 需要SSL,证书和防火墙IP限制

我已经建立了以前的所有,但我目前有一个问题.存储当前和历史密码的最佳做法是什么?

显然,存储明文密码是一个糟糕的解决方案.我需要能够让我的web服务读取密码并随每个请求一起传输.我还需要能够访问所有历史密码,以确保我新生成的密码不重复.

理想情况下,我想将每个(加密的)密码存储在我的数据库中,并在需要调用Web服务时对其进行解密.我应该遵循最佳做法吗?我应该使用Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.Cryptographer.EncryptSymmetric(..)加密每个密码吗?

注意:不幸的是,我无权更改外部API的功能.我必须遵守所提供的规则.

c# asp.net passwords web-services password-encryption

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

围绕多个人分配美元金额的问题

在代码中解决此问题的最佳方法是什么?

问题是我有2美元的金额(称为底池),需要分配给3个人.每个人获得来自两个盆的特定数量,并且费率必须大致相同.我不断遇到问题,我的分配加起来太多或太少.

这是一个具体的例子:

锅#1 987,654.32
锅#2 123,456.78

人员#1获得分配金额:345,678.89
人员#2获得分配金额:460,599.73
人员#3获得分配金额:304,832.48

我的逻辑如下(代码在c#中):

foreach (Person person in People)
{
    decimal percentage = person.AllocationAmount / totalOfAllPots;

    decimal personAmountRunningTotal = person.AllocationAmount;

    foreach (Pot pot in pots)
    {
        decimal potAllocationAmount = Math.Round(percentage * pot.Amount, 2);
        personAmountRunningTotal -= potAllocationAmount;

        PersonPotAssignment ppa = new PersonPotAssignment();
        ppa.Amount = potAllocationAmount;

        person.PendingPotAssignments.Add(ppa);
    }

    foreach (PersonPotAssignment ppa in person.PendingPotAssignments)
    {
        if (personAmountRunningTotal > 0) //Under Allocated
        {
            ppa.Amount += .01M;
            personAmountRunningTotal += .01M;
        }
        else if (personAmountRunningTotal < 0) //Over Allocated …
Run Code Online (Sandbox Code Playgroud)

.net c# puzzle rounding

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

如何执行可以反转密钥的 LINQ GroupBy?

我正在尝试在 LINQ 中执行复杂的 GroupBy,但我的键选择器遇到问题。在下面的代码中,我可以按一个方向的密钥进行分组(按 SellerID、BuyerID),但实际上我还需要按相反的密钥进行分组(按 SellerID、BuyerID 或 BuyerID、SellerID)。我这个查询的最终目标是当密钥反转时,我需要将资产金额设置为负数。这将使我能够扣除双方存在的任何金额,然后我最终将只得到该特定一方有金额的记录。

下面的代码应该解释它:

public class Record
{
    public int RecordID;
    public int SellerID;
    public int BuyerID;
    public List<Asset> Assets;
}

public class Asset
{
    public int AssetID;
    public decimal Amount;
}

var groups = new List<Record>
{
    new Record { RecordID = 1, SellerID = 100, BuyerID = 200, Assets = new List<Asset> { new Asset { AssetID = 5, Amount = 10 }}},
    new Record { RecordID = 2, SellerID = 100, BuyerID …
Run Code Online (Sandbox Code Playgroud)

c# linq

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

C#泛型和铸造问题

我无法将对象转换为通用IList.我有一组in语句试图解决这个问题,但必须有一个更好的方法来做到这一点.

这是我目前的方法:

string values;

if (colFilter.Value is IList<int>)
{
    values = BuildClause((IList<int>)colFilter.Value, prefix);
}
else if (colFilter.Value is IList<string>)
{
    values = BuildClause((IList<string>)colFilter.Value, prefix);
}
else if (colFilter.Value is IList<DateTime>)
{
    values = BuildClause((IList<DateTime>)colFilter.Value, prefix);
}
else if (...) //etc.
Run Code Online (Sandbox Code Playgroud)

我想要做的是:

values = BuildClause((IList<colFilter.ColumnType>)colFilter.Value, prefix);
Run Code Online (Sandbox Code Playgroud)

要么

values = BuildClause((IList<typeof(colFilter.ColumnType)>)colFilter.Value, prefix);
Run Code Online (Sandbox Code Playgroud)

要么

values = BuildClause((IList<colFilter.ColumnType.GetType()>)colFilter.Value, prefix);
Run Code Online (Sandbox Code Playgroud)

其中每个都会产生此编译器错误:找不到类型或命名空间名称'colFilter'(您是否缺少using指令或程序集引用?)

在我的例子中,colFilter.ColumnType是int,string,datetime等.我不知道为什么这不起作用.

有任何想法吗?

编辑:这是C#2.0

编辑#2

这是BuildClause方法(我有每种类型的重载):

private static string BuildClause(IList<int> inClause, string strPrefix)
{
    return BuildClause(inClause, strPrefix, false);
}

private static string BuildClause(IList<String> inClause, string …
Run Code Online (Sandbox Code Playgroud)

c# generics casting

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

C#Web应用程序中的常量

为便士的价值创造一个常数是否有意义?例如,如果我需要减少一分钱的金额.如果代码说:你认为它更具可读性吗?

amount -= Constants.StandardAmounts.Penny
Run Code Online (Sandbox Code Playgroud)

或者我甚至不应该打扰并只使用.01.

.net c# constants

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

数据库设计首选项:在SQL 2000中使用DateTime和BIT

我需要通过例子来解释这个:

是否有在数据库表中指定DateTime和BIT的最佳实践或首选项?

在我的数据库中,我有一个Widget表.我需要知道一个小部件是否"已关闭"并且它是"关闭日期"业务规则说如果一个小部件关闭,它必须有一个关闭日期.如果窗口小部件未关闭,则不应具有"关闭日期".

为了设计这个,我可以做到以下几点:

(例1):

CREATE TABLE [Widget]
(
    [WidgetID] INT IDENTITY(1,1)
    ,[ClosedDate] DATETIME NULL
)
Run Code Online (Sandbox Code Playgroud)

或(例2):

CREATE TABLE [Widget]
(
    [WidgetID] INT IDENTITY(1,1)
    ,[IsClosed] BIT NOT NULL CONSTRAINT [DF_Widget_IsClosed] DEFAULT (0)
    ,[ClosedDate] DATETIME NULL
)
Run Code Online (Sandbox Code Playgroud)

我认为示例1更清晰,因为它不用担心会减少一个列.但是,每当我需要评估Widget是否已关闭时,我需要一个额外的步骤来确定ClosedDate列是否为非NULL.

示例2创建了额外的开销,因为现在我必须保持IsClosed和ClosedDate值同步.

在设计这样的东西时有最好的做法吗?对于示例2,查询表格会更有效吗?我有什么理由选择一种设计而不是另一种设计?

注意:我将通过ORM工具和存储过程访问此值.

t-sql database-design sql-server-2000

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

如何获取T类型的两个变量之间的所有值?

如果我有两个类型为T的变量,是否可以获得两个变量之间的所有值,假设两个T类型相同?

我在.net 2.0中工作,并基于此代码构建了一个Range类:日期范围的交集

如果我知道类型是DateTime,很容易循环遍历日期,从Start值到End值.像这样:

List<DateTime> values = new List<DateTime>();

for (DateTime d = myRange.Start; d <= myRange.End; d = d.AddDays(1))
{
    values.Add(d);
}
Run Code Online (Sandbox Code Playgroud)

但是,为了使这更通用,有没有办法做任何类型T?

我要求一些不可能的东西吗?

c# asp.net generics

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

使用整数集合检查存在性能最高的方法是什么?

我有一个很大的整数列表,发送到我的webservice.我们的业务规则规定这些值必须是唯一的.什么是最有效的方法来确定是否有任何重复?我不需要知道值,我只需要知道其中两个值是否相等.

起初我正在考虑使用整数通用列表和list.Exists()方法,但这是O(n);

然后我考虑使用Dictionary和ContainsKey方法.但是,我只需要键,我不需要值.而且我认为这也是线性搜索.

是否有更好的数据类型可用于查找列表中的唯一性?还是我坚持线性搜索?

.net c# generics types unique

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