小编Mat*_*ias的帖子

在关于Equals覆盖的msdn指南中,为什么在null检查中转换为对象?

我只是在msdn上查看Overloading Equals()指南(参见下面的代码); 大部分内容对我来说很清楚,但有一条线我没有得到.

if ((System.Object)p == null)
Run Code Online (Sandbox Code Playgroud)

或者,在第二次覆盖中

if ((object)p == null)
Run Code Online (Sandbox Code Playgroud)

为什么不简单

 if (p == null)
Run Code Online (Sandbox Code Playgroud)

什么是反对购买我们的演员?

public override bool Equals(System.Object obj)
{
    // If parameter is null return false.
    if (obj == null)
    {
        return false;
    }

    // If parameter cannot be cast to Point return false.
    TwoDPoint p = obj as TwoDPoint;
    if ((System.Object)p == null)
    {
        return false;
    }

    // Return true if the fields match:
    return (x == p.x) && (y …
Run Code Online (Sandbox Code Playgroud)

c# operator-overloading

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

List.permute的性能

我最近实现了Fisher-Yates shuffle,它使用List.permute对列表进行洗牌,并注意到随着列表大小的增加,性能显着降低.我怀疑这是因为虽然算法假定它在数组上运行,但permute必须通过索引访问列表元素,即O(n).

为了确认这一点,我尝试将排列应用于列表以反转其元素,比较直接在列表上工作,并将列表转换为数组并返回到列表:

let permute i max = max - i - 1
let test = [ 0 .. 10000 ]

let rev1 list =
   let perm i = permute i (List.length list)
   List.permute perm list

let rev2 list =
   let array = List.toArray list
   let perm i = permute i (Array.length array)
   Array.permute perm array |> Array.toList 
Run Code Online (Sandbox Code Playgroud)

我得到以下结果,这往往证实了我的假设:

rev1 test;;
Real: 00:00:00.283, CPU: 00:00:00.265, GC gen0: 0, gen1: 0, gen2: 0
rev2 test;;
Real: 00:00:00.003, CPU: 00:00:00.000, …
Run Code Online (Sandbox Code Playgroud)

f# data-structures

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

使用LINQ选择n最大

这可能是一个关于LINQ的新手问题,但假设我有一组具有DateTime属性的Items,一个日期最多只有一个项目,我将如何从引用日期中选择N个最新项目,即N个项目的日期小于请求日期和最大日期?
我天真的想法是首先选择日期小于参考日期的项目,按日期排序,然后从该子集中选择N个第一项.

 var recentItems = from item in dataContext.Items
              where item.Date<=date 
              orderby item.Date descending 
              select item;

 var mostRecentItems = recentItems.Take(5).ToList();
Run Code Online (Sandbox Code Playgroud)

这是"正确"的方式,还是有更好的方法来实现我的目标?

.net c# linq

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

在数组数组上使用Array.map

我有一个数组P,它代表一个矩阵,作为一个行向量数组(这种表示对我来说更方便),我想提取该数组的列向量j.我的第一关是:

let column (M: float[][]) (j: int) =
   Array.map(fun v -> v.[j]) M
Run Code Online (Sandbox Code Playgroud)

这无法编译,告诉我v.[j]在不确定类型的对象上使用operator expr.[idx].这对我来说很困惑,因为将鼠标悬停在v上会将v识别为float [],我相信它是一个行向量.

此外,以下代码有效:

let column (M: float[][]) (j: int) =
   Array.map(fun v -> v) M
   |> Array.map (fun v -> v.[j])
Run Code Online (Sandbox Code Playgroud)

我不明白第二个例子与第一个例子有何不同.第二个示例中的第一个映射看起来是多余的:我将数组映射到自身,但这似乎解决了类型确定问题.

任何帮助,了解我做错了什么或不看,将不胜感激!

arrays f#

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

如果它是技术特定的,它仍然是一种设计模式吗?

今晚我参加了一个.NET用户组会议,其中一部分围绕模型 - 视图 - 视图模型模式展开,让我想知道这是否符合模式.
我遇到的问题是MV-VM是非常特定于技术的.如果您不使用WPF及其绑定机制,我看不出您如何使用该模式.
相比之下,大多数"经典"模式在很大程度上与技术无关.他们做出的最大假设是使用的语言是面向对象的,通常支持继承.除此之外,经典模式主要是关于陈述一般设计问题,并提出解决它的方法 - 但可能有多种实现或变体.
我的问题是,你在哪里画线,在什么是设计模式和什么是如何使用非常具体的框架的建议之间?如果您知道如何实现它以及您需要使用哪种语言和技术,它仍然是一种模式吗?

design-patterns mvvm

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

我应该用get声明我的抽象类的属性; 组;?

我正在制作一个小程序,它将抓取我的硬盘并显示在给定驱动器中找到的文件列表.

我的想法是拥有一个基本的File类,并实现从File.cs类继承的Picture.cs,Video.cs和Document.cs类.

这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SharpLibrary_MediaManager
{
    public abstract class File
    {
        public string name;
        public string fileType;
        public int size;
        public DateTime creationDate;
        public DateTime modificationDate;        
    }
}
Run Code Online (Sandbox Code Playgroud)

我应该为每个属性声明这样的简写代码:

public string name { get; set; }
Run Code Online (Sandbox Code Playgroud)

任何指导都会有所帮助.谢谢.:)

编辑:

我的意思是直接替换这一行:

public string name;
Run Code Online (Sandbox Code Playgroud)

用这一行:

public string name { get; set; }
Run Code Online (Sandbox Code Playgroud)

c# field properties c#-3.0

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

是否可以请求对VBA项目对象模型的临时受信任访问?

我需要通过.Net/C#访问Office文档的VBA代码(Excel工作簿,但它不相关).我知道如何执行此操作,但这需要Office用户通过Office应用程序授予对VBA项目对象模型的可信访问权限.
这让我感到不舒服,因为存在用户以这种方式设置的风险,这是不可取的,并且因为这需要用户触发Office应用并在未授予访问权限时更改设置,这是不愉快的为用户.
我相信.Net代码无法自动更改该设置(这很好),但有没有办法询问用户他/她是否想要临时授权?或者有没有办法在安装时专门为我的应用程序提供VBE访问权限?
我的假设是这些都不可行,但我认为,如果有人知道答案,他/她将在StackOverflow :)
作为一个奖金问题,有没有人知道如何以编程方式检查Office应用程序是否已授予访问权限VBA项目对象模型(没有try/catch是......)?

.net security vba office-interop vbe

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

计量单位的界限/域

我发现F#测量单位的想法非常吸引人.然而,通常情况是某些单位具有他们所居住的特定域.例如,距离是正数,温度大于开尔文零,概率在0和1之间,等等 - 但是我没有看到内置任何内容来表示这个概念,并验证特定值是特定单元的有效度量.计量单位是否支持这样的事情(我不这么认为),如果没有,是否有推荐的方法来实现这种行为?

validation f# units-of-measurement

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

这是一个正确的线程安全的随机包装器吗?

我对线程和并发性缺乏经验; 为了解决这个问题,我目前正在努力实现F#中的随机搜索算法.我根据现有C#示例的想法编写了一个围绕System.Random类的包装器 - 但由于我不确定如何开始对这个错误行为进行单元测试,我想听听更有经验的人有什么说法,如果我的代码存在明显的缺陷或改进,可能是由于F#语法或线程误解:

open System
open System.Threading

type Probability() =

   static let seedGenerator = new Random()

   let localGenerator = 
      new ThreadLocal<Random>(
         fun _ -> 
            lock seedGenerator (
               fun _ -> 
                  let seed = seedGenerator.Next()
                  new Random(seed)))

   member this.Draw() = 
      localGenerator.Value.NextDouble()
Run Code Online (Sandbox Code Playgroud)

我对此的理解是:ThreadLocal确保对于一个实例,每个线程都接收一个随机的Random实例,其自己的随机种子由一个公共的静态Random提供.这样,即使及时创建了类的多个实例,它们也会收到自己的种子,避免了"重复"随机序列的问题.该锁强制执行没有两个线程将获得相同的种子.

这看起来是否正确?有明显的问题吗?

random f# thread-safety

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

生成0和1的序列,使得在任何试验后1的概率为0.3

我试图生成一个0和1的随机序列,这样每当生成一个序列时,1的概率为0.3.我在Matlab中尝试了以下内容

%%clear all; %%close all;clc; %%(rand(1,10)<=0.3)
Run Code Online (Sandbox Code Playgroud)

问题是,每次我运行这个,我得到一个不同比例的1.有谁能建议更好的方法?

matlab probability

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