Thank you!
I tried your code, but face.Intersect(curve) always return 'Disjoint' for me.
I used face.Intersect(curve) method in my other project, then it return same things.. so I used other method.
So I solve this problem with this code.
double tolerance = 1e-9;
Reference extRef = HostObjectUtils.GetSideFaces(_createWall, ShellLayerType.Exterior).First();
Reference intRef = HostObjectUtils.GetSideFaces(_createWall, ShellLayerType.Interior).First();
PlanarFace extFace = (PlanarFace)_document.GetElement(extRef).GetGeometryObjectFromReference(extRef);
PlanarFace intFace = (PlanarFace)_document.GetElement(intRef).GetGeometryObjectFromReference(intRef);
Solid faceSolid1 = GeometryCreationUtilities.CreateExtrusionGeometry(extFace.GetEdgesAsCurveLoops(), extFace.FaceNormal, 0.001);
Solid oppositeFaceSolid1 = GeometryCreationUtilities.CreateExtrusionGeometry(extFace.GetEdgesAsCurveLoops(), -extFace.FaceNormal, 0.001);
Solid interSolid1 = BooleanOperationsUtils.ExecuteBooleanOperation(faceSolid1, _elementSolid, BooleanOperationsType.Intersect);
Solid oppositeInterSolid1 = BooleanOperationsUtils.ExecuteBooleanOperation(oppositeFaceSolid1, _elementSolid, BooleanOperationsType.Intersect);
Solid faceSolid2 = GeometryCreationUtilities.CreateExtrusionGeometry(intFace.GetEdgesAsCurveLoops(), intFace.FaceNormal, 0.001);
Solid oppositeFaceSolid2 = GeometryCreationUtilities.CreateExtrusionGeometry(intFace.GetEdgesAsCurveLoops(), -intFace.FaceNormal, 0.001);
Solid interSolid2 = BooleanOperationsUtils.ExecuteBooleanOperation(faceSolid2, _elementSolid, BooleanOperationsType.Intersect);
Solid oppositeInterSolid2 = BooleanOperationsUtils.ExecuteBooleanOperation(oppositeFaceSolid2, _elementSolid, BooleanOperationsType.Intersect);
bool extIntersect = interSolid1.Volume >= tolerance || oppositeInterSolid1.Volume >= tolerance;
bool intIntersect = interSolid2.Volume >= tolerance || oppositeInterSolid2.Volume >= tolerance;