小编Dan*_*ker的帖子

如何检查单词是否以给定字符开头?

我有一个Sharepoint项目列表:每个项目都有标题,描述和类型.我成功检索了它,我打电话给它result.我想首先检查是否有任何项目result以A开头然后是B然后是C等.我将为每个字母字符做同样的事情然后如果我找到一个以这个字符开头的单词我将必须显示粗体字符.

我最初使用此功能显示字符:

private string generateHeaderScripts(char currentChar)
{
    string headerScriptHtml = "$(document).ready(function() {" +
        "$(\"#myTable" + currentChar.ToString() + "\") " +
        ".tablesorter({widthFixed: true, widgets: ['zebra']})" +
        ".tablesorterPager({container: $(\"#pager" + currentChar.ToString() +"\")}); " +
        "});";
    return headerScriptHtml;
}
Run Code Online (Sandbox Code Playgroud)

如何检查单词是否以给定字符开头?

c# sharepoint web-parts

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

当实现IEnumerable <T>两次时,LINQ会感到困惑

我的班级实施了IEnumerable<T>两次.我怎样才能让LINQ无需hashtable每次都进行投射?


我编写了自己的协变哈希表实现,它也继承自.NET IDictionary<TKey, TValue>.最终,它实现了IEnumerable<T>两次不同的类型T.我隐式地实现了主要的可枚举接口,并且明确地实现了另一个.像这样的东西(伪代码):

class HashTable<TKey, TValue> :
    ...
    IEnumerable<out IAssociation<out TKey, out TValue>>,
    IEnumerable<out KeyValuePair<TKey, TValue>>
{
    // Primary:
    public IEnumerator<IAssociation<TKey, TValue>> GetEnumerator();
    // Secondary:
    IEnumerator<KeyValuePair<TKey, TValue>> IEnumerable<KeyValuePair<TKey, TValue>>.GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)

当我foreach在哈希表中时,它按预期采用主要的可枚举:

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

var hashtable = new HashTable<string, int>();
foreach (var kv in hashtable)
{
    // kv is IAssociation<string, int>
}
Run Code Online (Sandbox Code Playgroud)

现在我希望它在LINQ中做同样的事情,但它在我身上编译错误,因为它不知道为扩展方法选择哪个接口:

var xs1 = from x in hashtable          // <-- …
Run Code Online (Sandbox Code Playgroud)

c# linq generics collections ienumerable

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

将int32添加到64位本机int的结果?

int3264 添加到64位时native int,CLR是否对32位整数进行符号扩展或零扩展?最重要的是:基于这些选择的信息?


我正在编写一个.NET编译器,并且已经完全阅读了ECMA规范,但找不到答案.

CLI支持只有在存储在其计算堆栈中的值这些类型在其业务的子集:int32,int64,和native int.
- ECMA 335,第I节12.1:支持的数据类型

由于评估堆栈上的值没有关于其签名的信息,因此操作数的符号性重要的指令有两个变体:一个用于有符号,一个用于无符号整数.的add,submul指令(那些不检查溢出)不需要,只要操作数是相同大小关心操作数的符号性,因此只有一个变种.但是,操作数并不总是相同的大小......

ECMA 335,第III节1.5:操作数类型表说明aint32和anative int可以加,减,乘和除.结果又是一个native int.在64位系统上,anative int为64位宽.

ldc.i4.0            // Load int32 0
conv.i              // Convert to (64-bit) native int
ldc.i4.m1           // Load int32 -1
add                 // Add native int 0 and int32 0xFFFFFFFF together
Run Code Online (Sandbox Code Playgroud)

那么结果会是什么呢?请注意,根据规范,运行时不需要跟踪堆栈上值的确切类型或签名:它只知道int32,int64native int(以及其他一些不相关的).


我会想象IntPtr和 …

.net clr integer specifications

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

如何将Visual Studio的"我的代码片段"文件夹移动到另一个驱动器?

一个简单的问题,我无法找到设置或答案:

我将Windows中的Documents文件夹重新定位到另一个驱动器.如何将Visual Studio 2012中的My Code Snippets文件夹路径从默认位置更改为新位置?

默认位于C:上的Documents文件夹中.

C:\Users\Virtlink\Documents\
    Visual Studio 2012\Code Snippets\Visual C#\My Code Snippets
Run Code Online (Sandbox Code Playgroud)

但我将我的Documents文件夹移动到我的驱动器D:,但Visual Studio没有接受此更改并强制在C:上创建该文件夹.这会导致My Code Snippets代码片段管理器旁边的感叹号出现一些奇怪的行为,以及导入片段时出错.

当我从我的用户文件夹打开"我的文档"时,Windows指示我的文件夹是D:\Personal\,我也想要那里的代码片段:

D:\Personal\Visual Studio 2012\Code Snippets\Visual C#\My Code Snippets
Run Code Online (Sandbox Code Playgroud)

如有必要,我不介意移动整个Visual Studio 2012子文件夹.我只是无法找到如何在Visual Studio中设置它.

在此输入图像描述

visual-studio code-snippets visual-studio-2012

13
推荐指数
2
解决办法
8555
查看次数

借用Box <Trait>内容如何工作?

我有这个最小的示例代码:

use std::borrow::BorrowMut;

trait Foo {}
struct Bar;
impl Foo for Bar {}

fn main() {
    let mut encryptor: Box<Foo> = Box::new(Bar);

    encrypt(encryptor.borrow_mut());
}

fn encrypt(encryptor: &mut Foo) { }
Run Code Online (Sandbox Code Playgroud)

但它失败了这个错误:

error: `encryptor` does not live long enough
  --> src/main.rs:11:1
   |
10 |     encrypt(encryptor.borrow_mut());
   |             --------- borrow occurs here
11 | }
   | ^ `encryptor` dropped here while still borrowed
   |
   = note: values in a scope are dropped in the opposite order they are created
Run Code Online (Sandbox Code Playgroud)

#rustbeginners的善良人士发现我必须取消引用该框以获取内容,然后借用内容.像这样 …

traits rust borrow-checker

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

在.net 4.0版本上找不到System.Web程序集

我将.NET更新3.54.0版本,但更新后的程序集System.Web不再起作用.

我收到以下错误:

警告1无法解析程序集"System.Web".程序集不在当前目标框架".NETFramework,Version = v4.0,Profile = Client"中.请删除不在目标框架中的程序集的引用或考虑重新定位项目.

使用该3.5版本它工作正常.我怎样才能解决这个问题?

.net c# system.web c#-4.0

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

为什么基于堆栈的IL字节码中存在局部变量

在基于堆栈的中间语言中,例如CIL或Java字节码,为什么有局部变量?人们可以只使用堆栈.手工制作的IL可能不那么容易,但编译器肯定可以做到.但我的C#编译器没有.

堆栈和局部变量都是方法专用的,并且在方法返回时超出范围.所以它与从方法外部(从另一个线程)可见的副作用无关.

当生成机器代码时,JIT编译器将消除对堆栈槽和局部变量的加载和存储,如果我是正确的,那么JIT编译器也不会看到对局部变量的需要.

另一方面,C#编译器为局部变量生成加载和存储,即使在启用了优化的情况下进行编译也是如此.为什么?


举例来说,以下设计的示例代码:

static int X()
{
    int a = 3;
    int b = 5;
    int c = a + b;
    int d;
    if (c > 5)
        d = 13;
    else
        d = 14;
    c += d;
    return c;
}
Run Code Online (Sandbox Code Playgroud)

在C#中编译时,通过优化,它会产生:

    ldc.i4.3        # Load constant int 3
    stloc.0         # Store in local var 0
    ldc.i4.5        # Load constant int 5
    stloc.1         # Store in local var 1
    ldloc.0         # Load from local var 0
    ldloc.1         # Load …
Run Code Online (Sandbox Code Playgroud)

c# java bytecode local-variables

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

通过PublicKeyToken防止外部程序集注入

我正在使用以下代码:

AppDomain.CurrentDomain.AssemblyLoad += (sender, args) =>
{
    var token = args.LoadedAssembly.GetName().GetPublicKeyToken();

    if (!IsValidToken(token))
    {
        Process.GetCurrentProcess().Kill();
    }
};
Run Code Online (Sandbox Code Playgroud)

IsValidToken()进行比较加载反对我作为字节数组应用硬编码授权的公钥标记列表组件的公钥标记.

这是防止代码注入攻击的良好安全措施吗?此外,鉴于我稍后将使用NetReactor混淆我的应用程序,这是否必要?我试图阻止任何"窥探"我的应用程序,不仅来自Snoop工具,而且来自任何外部不受欢迎的来源.

c# assemblies .net-4.0 code-injection

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

在C#中使用运算符构造自定义表达式树

这个问题是关于使用C#(或任何其他语言)中的运算符在.NET中构建自定义表达式树.我提供了一些问题以及一些背景信息.


对于我的托管2阶段64位汇编程序,我需要支持表达式.例如,有人可能想要组装:

mystring: DB 'hello, world'
          TIMES 64-$+mystring DB ' '
Run Code Online (Sandbox Code Playgroud)

表达式64-$+mystring不能是一个字符串,而是一个实际的有效表达式,具有语法和类型检查以及VS中的IntelliSense的优点,具体包括:

64 - Reference.CurrentOffset + new Reference("mystring");
Run Code Online (Sandbox Code Playgroud)

构造时不会计算此表达式.相反,它稍后在我的汇编程序的上下文中进行评估(当它确定符号偏移等时)..NET框架(自.NET 3.5起)提供了对表达式树的支持,在我看来,它非常适合于稍后或其他地方评估的这种表达式.

但我不知道如何确保我可以使用C#语法(使用+,<<,%等等)来构造表达式树.我想要防止这样的事情:

var expression = AssemblerExpression.Subtract(64,
    AssemblerExpression.Add(AssemblerExpression.CurrentOffset(),
        AssemblerExpression.Reference("mystring")))
Run Code Online (Sandbox Code Playgroud)

你会怎么做?


注意:我需要一个表达式树,以便能够将表达式转换为可接受的自定义字符串表示形式,同时能够在除定义之外的某个时间点对其进行评估.


我的例子的解释:64-$+mystring.这$是当前的偏移量,因此它是一个事先未知的特定数字(但在评估时已知).这mystring是在评估时可能知道或可能不知道的符号(例如,当它尚未定义时).从符号S中减去常数C与相同S + -C.减去两个符号S0和S1(S1 - S0)给出两个符号值之间的整数差.

但是,这个问题并不是关于如何评估汇编程序表达式,而是关于如何评估其中包含自定义类的任何表达式(对于符号和$示例中的内容)以及如何仍然确保它可以是非常的 -使用一些访客打印(从而保留树).由于.NET框架具有表达式树和访问者,如果可能的话,使用它们会很好.

.net c# operators expression-trees

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

在C#文本文件读取中发出约65533.

我创建了一个示例应用程序来加载所有特殊字符,同时将粘贴从Openoffice编写器复制到记事本.双重代码不同,当我尝试加载它时.

var lines = File.ReadAllLines("..\\ter34.txt");
Run Code Online (Sandbox Code Playgroud)

这会产生65533问题的问题,文本文件包含:

Run Code Online (Sandbox Code Playgroud)

这已更改为符号:

  ?  
Run Code Online (Sandbox Code Playgroud)

c# unicode

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