我有5个数字即:1 1 1 2 3; 除了最小数量之外,我必须将它们相加,但我只能删除它一次(如果最小值出现不止一次,我必须保留其余部分).我怎么能用Linq做到这一点?我想:
var min = nums.Min();
var minSum = nums.Where(x => x != min).Sum();
Run Code Online (Sandbox Code Playgroud)
但是它从列表中删除了所有1.如果出现超过1次,我需要一种方法从哪里出去.
所有这一切都与Linq有关.
我有一个C#程序调用一个COM DLL,它有一个调用test两个参数的方法:传递第一个参数,传递ByVal第二个参数ByRef.
这就是COM DLL的作用:
Public Sub test(ByVal a As String, ByRef b As String)
a = "a"
b = "b"
End Sub
Run Code Online (Sandbox Code Playgroud)
这就是C#程序的作用:
test.Class1 x = new test.Class1();
string a = "1";
string b = "2";
x.test(a, ref b);
Run Code Online (Sandbox Code Playgroud)
我注意到,如果我删除ref关键字,编译器不建议我错过ref关键字并传递参数ByVal.如果我错过ref关键字,这可能是一个大问题,因为在我知道它想要之前我无法注意到它ref.你知道为什么编译器会出现这种行为吗?
为什么Class1.a仍然为null,即使我引用它并更改其值?字符串是引用类型,所以我认为更改值会影响引用,但事实并非如此.有人能解释我为什么吗?这是静态声明者?
class Class1
{
public static string a;
}
void Main()
{
string a = Class1.a;
a = "hello";
MessageBox.Show(Class1.a);
}
Run Code Online (Sandbox Code Playgroud)
输出:null
在foreach loop当条件是有一个意外的行为true其实都是指令后内if statement,循环中断.我试着评论if语句并且一切正常(将所有元素迭代到ienumerable中).有人能解释我为什么吗?
var allRef = projDefinition
.Element(msbuild + "Project")
.Elements(msbuild + "ItemGroup")
.Elements(msbuild + "COMReference")
.Where(refElem => find.Any(f => refElem.FirstAttribute.Value.ToLower().Contains(f)))
.Select(refElem => refElem);
foreach (var xElement in allRef)
{
var name = xElement.FirstAttribute.Value;
var dllPath = dllFiles.FirstOrDefault(dll => dll.ToLower().Contains(name.ToLower()));
if (dllPath != null)
{
var dllName = dllPath.Substring(dllPath.LastIndexOf('\\') + 1, dllPath.LastIndexOf('.') - dllPath.LastIndexOf('\\') - 1);
xElement.Remove();
XElement elem = new XElement(msbuild + "Reference", new XAttribute("Include", dllName));
elem.Add(new XElement(msbuild + "HintPath", HintPath.GetHintPath(dllPath)));
elem.Add(new XElement(msbuild …Run Code Online (Sandbox Code Playgroud)