帮我优化这段C#代码 public PointList Pts(PointList list, Point point, double distance) { PointList list2 = new PointList(); for (int i = 0; i < list.Count; i++) { int num4 = Convert.ToInt32(Distance.PointToPoint(point, (Point)list[i])); if (num4 == Convert.ToInt32(distance)) { list2.Add((Point)list[i]); } } return list2; }
时间: 2023-12-12 19:02:17 浏览: 29
可能的优化方式如下:
1. 避免使用 Convert.ToInt32 方法,因为这会增加运行时间和内存消耗。可以使用 Math.Round 方法来将 double 类型的值四舍五入为整数。
2. 避免多次计算 Distance.PointToPoint(point, (Point)list[i]) 的值,因为这是一个比较耗时的操作。可以将其计算结果保存在一个变量中,以便后续使用。
3. 使用 foreach 循环代替 for 循环,以简化代码并提高可读性。
经过优化的代码如下所示:
public PointList Pts(PointList list, Point point, double distance)
{
PointList list2 = new PointList();
foreach (Point p in list)
{
int num4 = (int)Math.Round(Distance.PointToPoint(point, p));
if (num4 == (int)Math.Round(distance))
{
list2.Add(p);
}
}
return list2;
}
希望这能对您有所帮助!
相关问题
revit二次开发 给List<XYZ>pointList列表 按照x值从小到大排序
您可以使用LINQ(Language Integrated Query)来对List<XYZ>中的pointList按照x值从小到大排序。以下是一个示例代码:
```csharp
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
// 示例点列表
List<XYZ> pointList = new List<XYZ>
{
new XYZ(3, 2, 1),
new XYZ(1, 2, 3),
new XYZ(2, 1, 3)
};
// 按照x值从小到大排序
List<XYZ> sortedList = pointList.OrderBy(p => p.X).ToList();
// 输出排序结果
foreach (XYZ point in sortedList)
{
Console.WriteLine($"X: {point.X}, Y: {point.Y}, Z: {point.Z}");
}
}
}
public class XYZ
{
public double X { get; set; }
public double Y { get; set; }
public double Z { get; set; }
public XYZ(double x, double y, double z)
{
X = x;
Y = y;
Z = z;
}
}
```
运行以上代码,将会按照x值从小到大的顺序输出点的坐标。在Revit二次开发中,您可以将上述代码嵌入到您的插件或者外部命令中,根据您的需求进行调整和适配。
帮我优化这段C#代码 if (_jinbanhou4 != 0.0) { if (_p12 ==1) { SolidClass.CreateContourPlate(b, new PointList { new ContourPoint(point1, chamfer), new ContourPoint(point8, null), new ContourPoint(point7, null) }, _jinbanhou4, _jinbanqianzui4, _jinbanmingcheng4); } if (_p13 ==1) { SolidClass.CreateContourPlate(b1, new PointList { new ContourPoint(point4, chamfer), new ContourPoint(point5, null), new ContourPoint(point6, null) }, _jinbanhou4, _jinbanqianzui4, _jinbanmingcheng4); } if (_p14 == 1) { SolidClass.CreateContourPlate(b1, new PointList { new ContourPoint(pt6, chamfer), new ContourPoint(point2, null), new ContourPoint(point3, null) }, _jinbanhou4, _jinbanqianzui4, _jinbanmingcheng4); } }
可能的优化方式如下:
1. 将相似的代码段提取出来,避免重复代码。
2. 使用 switch 语句代替多个 if 语句,以提高可读性和可维护性。
3. 将重复使用的变量存储在一个变量中,以避免不必要的计算。
经过优化的代码如下所示:
if (_jinbanhou4 != 0.0)
{
PointList pointList1 = new PointList();
PointList pointList2 = new PointList();
PointList pointList3 = new PointList();
pointList1.Add(new ContourPoint(point1, chamfer));
pointList1.Add(new ContourPoint(point8, null));
pointList1.Add(new ContourPoint(point7, null));
pointList2.Add(new ContourPoint(point4, chamfer));
pointList2.Add(new ContourPoint(point5, null));
pointList2.Add(new ContourPoint(point6, null));
pointList3.Add(new ContourPoint(pt6, chamfer));
pointList3.Add(new ContourPoint(point2, null));
pointList3.Add(new ContourPoint(point3, null));
switch (_p12 + _p13 * 2 + _p14 * 4)
{
case 1:
SolidClass.CreateContourPlate(b, pointList1, _jinbanhou4, _jinbanqianzui4, _jinbanmingcheng4);
break;
case 2:
SolidClass.CreateContourPlate(b1, pointList2, _jinbanhou4, _jinbanqianzui4, _jinbanmingcheng4);
break;
case 3:
SolidClass.CreateContourPlate(b, pointList1, _jinbanhou4, _jinbanqianzui4, _jinbanmingcheng4);
SolidClass.CreateContourPlate(b1, pointList2, _jinbanhou4, _jinbanqianzui4, _jinbanmingcheng4);
break;
case 4:
SolidClass.CreateContourPlate(b1, pointList3, _jinbanhou4, _jinbanqianzui4, _jinbanmingcheng4);
break;
case 5:
SolidClass.CreateContourPlate(b, pointList1, _jinbanhou4, _jinbanqianzui4, _jinbanmingcheng4);
SolidClass.CreateContourPlate(b1, pointList3, _jinbanhou4, _jinbanqianzui4, _jinbanmingcheng4);
break;
case 6:
SolidClass.CreateContourPlate(b1, pointList2, _jinbanhou4, _jinbanqianzui4, _jinbanmingcheng4);
SolidClass.CreateContourPlate(b1, pointList3, _jinbanhou4, _jinbanqianzui4, _jinbanmingcheng4);
break;
case 7:
SolidClass.CreateContourPlate(b, pointList1, _jinbanhou4, _jinbanqianzui4, _jinbanmingcheng4);
SolidClass.CreateContourPlate(b1, pointList2, _jinbanhou4, _jinbanqianzui4, _jinbanmingcheng4);
SolidClass.CreateContourPlate(b1, pointList3, _jinbanhou4, _jinbanqianzui4, _jinbanmingcheng4);
break;
default:
break;
}
}
希望这能对您有所帮助!