我不会VB,有的地方转不过来,代码不多,可以吗?我先贴出一段,谢谢大家了
Public Sub MergeAllByOne(ByVal pEnumFeature As IEnumFeature, ByVal lSCode As Long, ByVal lGTotalVal As Double)
        If m_pCurrentLayer Is Nothing Then
            Exit Sub
        End If
        Dim pWorkspaceEdit As IWorkspaceEdit = GetWorkspaceEdit()
        Dim pFeatureLayer As IFeatureLayer = m_pCurrentLayer
        Dim pFeatureClass As IFeatureClass = pFeatureLayer.FeatureClass
        pWorkspaceEdit.StartEditOperation()        pEnumFeature.Reset()
        Dim pCurFeature As IFeature
        Dim pNewFeature As IFeature
        Dim lCount As Long
        pNewFeature = pFeatureClass.CreateFeature()        Dim pGeom As IGeometry
        Dim pTmpGeom As IGeometry
        Dim pOutputGeometry As IGeometry
        Dim pTopoOperator As ITopologicalOperator        Dim pOutRSType As IRowSubtypes
        pOutRSType = pNewFeature
        If lSCode <> 0 Then
            pOutRSType.SubtypeCode = lSCode
        End If
        pOutRSType.InitDefaultValues()        pCurFeature = pEnumFeature.Next()
        Dim pFlds As IFields
        pFlds = pFeatureClass.Fields        lCount = 1
        Do
            pGeom = pCurFeature.ShapeCopy
            If lCount = 1 Then
                pTmpGeom = pGeom
            Else
                pTopoOperator = pTmpGeom
                pOutputGeometry = pTopoOperator.Union(pGeom)
                pTmpGeom = pOutputGeometry
            End If            Dim pFld As IField
            Dim pDomain As IDomain
            Dim pSubtypes As ISubtypes
            pSubtypes = pFeatureClass
            Dim i As Long
            For i = 0 To pFlds.FieldCount - 1
                pFld = pFlds.Field(i)
                pDomain = pSubtypes.Domain(lSCode, pFld.Name)
                If Not pDomain Is Nothing Then
                    Select Case pDomain.MergePolicy
                        Case esriMergePolicyType.esriMPTSumValues
                            If lCount = 1 Then
                                pNewFeature.Value(i) = pCurFeature.Value(i)
                            Else
                                pNewFeature.Value(i) = pNewFeature.Value(i) + pCurFeature.Value(i)
                            End If
                        Case esriMergePolicyType.esriMPTAreaWeighted
                            If lCount = 1 Then
                                pNewFeature.Value(i) = pCurFeature.Value(i) * (getGeomVal(pCurFeature) / lGTotalVal)
                            Else
                                pNewFeature.Value(i) = pNewFeature.Value(i) + (pCurFeature.Value(i) * (getGeomVal(pCurFeature) / lGTotalVal))                            End If
                    End Select
                End If
            Next i
            pCurFeature.Delete()
            pCurFeature = pEnumFeature.Next()
            lCount = lCount + 1        Loop Until pCurFeature Is Nothing        pNewFeature.Shape = pOutputGeometry
        pNewFeature.Store()
        pWorkspaceEdit.StopEditOperation()        Dim pRefresh As IInvalidArea
        pRefresh = New InvalidArea
        Dim pActiveView As IActiveView
        pActiveView = m_pMap
        pRefresh.Display = pActiveView.ScreenDisplay
        pRefresh.Add(pNewFeature)
        pRefresh.Invalidate(esriScreenCache.esriAllScreenCaches)        m_pMap.ClearSelection()
        m_pMap.SelectFeature(m_pCurrentLayer, pNewFeature)    End Sub

解决方案 »

  1.   

    public void MergeAllByOne(IEnumFeature pEnumFeature, long lSCode, double lGTotalVal) {
            if ((m_pCurrentLayer == null)) {
                return;
            }
            IWorkspaceEdit pWorkspaceEdit = GetWorkspaceEdit();
            IFeatureLayer pFeatureLayer = m_pCurrentLayer;
            IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
            pWorkspaceEdit.StartEditOperation();
            pEnumFeature.Reset();
            IFeature pCurFeature;
            IFeature pNewFeature;
            long lCount;
            pNewFeature = pFeatureClass.CreateFeature();
            IGeometry pGeom;
            IGeometry pTmpGeom;
            IGeometry pOutputGeometry;
            ITopologicalOperator pTopoOperator;
            IRowSubtypes pOutRSType;
            pOutRSType = pNewFeature;
            if ((lSCode != 0)) {
                pOutRSType.SubtypeCode = lSCode;
            }
            pOutRSType.InitDefaultValues();
            pCurFeature = pEnumFeature.Next();
            IFields pFlds;
            pFlds = pFeatureClass.Fields;
            lCount = 1;
            for (
            ; ((pCurFeature == null) 
                        == false); 
            ) {
                pGeom = pCurFeature.ShapeCopy;
                if ((lCount == 1)) {
                    pTmpGeom = pGeom;
                }
                else {
                    pTopoOperator = pTmpGeom;
                    pOutputGeometry = pTopoOperator.Union(pGeom);
                    pTmpGeom = pOutputGeometry;
                }
                IField pFld;
                IDomain pDomain;
                ISubtypes pSubtypes;
                pSubtypes = pFeatureClass;
                long i;
                for (i = 0; (i 
                            <= (pFlds.FieldCount - 1)); i++) {
                    pFld = pFlds.Field(i);
                    pDomain = pSubtypes.Domain(lSCode, pFld.Name);
                    if (!(pDomain == null)) {
                        switch (pDomain.MergePolicy) {
                            case esriMergePolicyType.esriMPTSumValues:
                                if ((lCount == 1)) {
                                    pNewFeature.Value(i) = pCurFeature.Value(i);
                                }
                                else {
                                    pNewFeature.Value(i) = (pNewFeature.Value(i) + pCurFeature.Value(i));
                                }
                                break;
                            case esriMergePolicyType.esriMPTAreaWeighted:
                                if ((lCount == 1)) {
                                    pNewFeature.Value(i) = (pCurFeature.Value(i) 
                                                * (getGeomVal(pCurFeature) / lGTotalVal));
                                }
                                else {
                                    pNewFeature.Value(i) = (pNewFeature.Value(i) 
                                                + (pCurFeature.Value(i) 
                                                * (getGeomVal(pCurFeature) / lGTotalVal)));
                                }
                                break;
                        }
                    }
                }
                pCurFeature.Delete();
                pCurFeature = pEnumFeature.Next();
                lCount = (lCount + 1);
            }
            pNewFeature.Shape = pOutputGeometry;
            pNewFeature.Store();
            pWorkspaceEdit.StopEditOperation();
            IInvalidArea pRefresh;
            pRefresh = new InvalidArea();
            IActiveView pActiveView;
            pActiveView = m_pMap;
            pRefresh.Display = pActiveView.ScreenDisplay;
            pRefresh.Add(pNewFeature);
            pRefresh.Invalidate(esriScreenCache.esriAllScreenCaches);
            m_pMap.ClearSelection();
            m_pMap.SelectFeature(m_pCurrentLayer, pNewFeature);
        }
      

  2.   

    我帮你改,只是示例的做几个,按照如下原则做:1、定义
    Dim pWorkspaceEdit As IWorkspaceEdit
    /Dim pWorkspaceEdit As New IWorkspaceEdit改成(以分号结速一行)IWorkspaceEdit pWorkspaceEdit;
    /IWorkspaceEdit pWorkspaceEdit = new IWorkspaceEdit();即 Dim 类型实例 As New 类型 ==》 类型 类型实例 = new 类型实例();2、判断
    If m_pCurrentLayer Is Nothing Then
                Exit Sub
    End If改成if (m_pCurrentLayer == null)
    {
        return;
    }
    3、调用方法pWorkspaceEdit.StartEditOperation()改成(加一个分号就行)pWorkspaceEdit.StartEditOperation();VB的
    Call 方法  或  方法
    改成  方法();
    4、Select Case语句
     Select Case pDomain.MergePolicy                Case esriMergePolicyType.esriMPTSumValues
                                If lCount = 1 Then
                                    pNewFeature.Value(i) = pCurFeature.Value(i)
                                Else
                                    pNewFeature.Value(i) = pNewFeature.Value(i) + pCurFeature.Value(i)
                                End If
                            Case esriMergePolicyType.esriMPTAreaWeighted
    改成
    switch(pDomain.MergePolicy)
    {
       case esriMergePolicyType.esriMPTSumValues:
        if(lCount == 1)
    {                                
       pNewFeature.Value[i] = pCurFeature.Value[i];
    }
    else
    {
    pNewFeature.Value[i] = pNewFeature.Value[i] + pCurFeature.Value[i];
    }
    break;Case esriMergePolicyType.esriMPTAreaWeighted:
    ...
    break;default:
    //...
    break; }
      

  3.   

    5、索引器
    将()
    改成
    []如上pNewFeature.Value(i) = pCurFeature.Value(i); ==>pNewFeature.Value[i] = pCurFeature.Value[i];
    6、注释
    VB用'
    C#用//如果是多行,可用
    /*
    这是注释
    /*7折叠
    仅说明一下区别
    VB中的折叠是受限制的,不能用在Sub和Function内部,但是C#不限任何限制#region 这是折叠部分,很方便...
     
    //随便写什么,想折叠什么就折叠什么#endregion
      

  4.   

    还有,关键字要小写,变量区分大小写,share对应static,sub对应void,public function F() as 类型 对应 public 类型 F{...} ...把握以上几点就没大问题了你下载打印源码看看,全部用C#对照VB.NET写的
    www.webmis.com.cn